-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
강의내용 따라하는데 오류가 발생하는데 원인을 못찾겠어요.. (사용자 조회 API 성공시)
18.07.10 01:03 작성 조회수 97
0
var express = require('express');
var morgan = require('morgan');
var app = express();
var users = [
{id: 1, name: 'alice'},
{id: 2, name: 'daniel'},
{id: 3, name: 'chris'}
];
app.use(morgan('dev'));
app.get('/users', function (req, res) {
req.query.limit = req.query.limit || 10;
const limit = parseInt(req.query.limit, 10);
if(Number.isNaN(limit)) {
return res.status(400).end();
}
res.json(users.slice(0, limit));
});
app.get('/users/:id,', function (req, res) {
const id = parseInt(req.params.id, 10); //10진법
if(Number.isNaN(id)) return res.status(400).end();
const user = users.filter((user) => user.id === id)[0];
if(!user) return res.status(404).end();
res.json(user);
});
app.delete('/users/:id', (req, res) => {
const id = parseInt(req.params.id, 10); //10진법
if(Number.isNaN(id)) return res.status(400).end();
users.filter(user=>user.id !== id);
res.status(204).end();
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
module.exports = app;
위 코드는 index.js이고
const request = require('supertest');
const should = require('should');
const app = require('./index');
describe('GET /users는', () => {
describe('성공시', () => {
// 1. 유저 객체를 담은 배열로 응답
it('유저 객체를 담은 배열로 응답한다 ', (done) => { //비동기로 테스트할때는 파라미터에 done을 넣어주어야함.
request(app)
.get('/users')
.end((err, res) => {
res.body.should.be.instanceOf(Array);
done(); // 비동기로 테스트할때는 처리가 끝난 후 done() 함수를 호출해야한다.
});
})
// 2. 최대 limit 개수만큼 응답 it('최대 limit 개수만큼 응답한다.', (done) => { // 비동기로 테스트시 done이라는 callback함수를 넣어줘야함
request(app)
.get('/users?limit=2')
.end((err, res) => {
res.body.should.have.lengthOf(2);
done(); // 비동기로 테스트할때는 처리가 끝난 후 done() 함수를 호출해야한다.
});
})
});
describe('실패시', () => {
// 3. limit이 숫자형이 아니면 400을 응답한다.
it('limit이 숫자형이 아니면 400을 응답한다 ', (done) => { //비동기로 테스트할때는 파라미터에 done을 넣어주어야함.
request(app)
.get('/users?limit=two')
.expect(400) // 4. offset이 숫자형이 아니면 400을 응답한다
//.end((err, res) => {
// done(); // 비동기로 테스트할때는 처리가 끝난 후 done() 함수를 호출해야한다.
//});
.end(done); //done만 호출하고 res활용을 안하니까 간단하게 코딩.
})
})
});
describe('GET /users/1는', () => {
describe('성공시', () => {
it('id가 1인 유저 객체를 반환한다', (done) => {
request(app)
.get('/users/1')
.end((err, res) => {
res.body.should.have.property('id', 1);
done();
});
});
});
describe('실패시', () => { it('id가 슷자가 아닐경우 400을 응답한다', (done) => {
request(app)
.get('/users/one')
.expect(400)
.end(done);
});
it('id로 유저를 찾을 수 없을 경우 404로 응답한다', (done) => {
request(app)
.get('/users/999')
.expect(404)
.end(done);
});
});
});
describe('GET /users/1', () => {
describe('성공시', () => {
it('204를 응답한다', (done) => {
request(app)
.delete('/users/1')
.expect(204)
.end(done);
});
});
describe('실패시', () => {
it('id가 숫자가 아닐경우 400으로 응답한다', (done) => {
request(app)
.delete('/users/one')
.expect(400)
.end(done);
});
})
});
위 코드는 index.spec.js입니다.
1) GET /users/1는
성공시
id가 1인 유저 객체를 반환한다:
Uncaught AssertionError: expected Object {} to have property id
at Assertion.fail (node_modulesshouldcjsshould.js:275:17)
at Assertion.value [as property] (node_modulesshouldcjsshould.js:356:19)
at Test.request.get.end (study-eduindex.spec.js:49:42)
at Test.assert (node_modulessupertestlibtest.js:181:6)
at Server.assert (node_modulessupertestlibtest.js:131:12)
at emitCloseNT (net.js:1659:8)
at _combinedTickCallback (internal/process/next_tick.js:135:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
2) GET /users/1는
실패시
id가 슷자가 아닐경우 400을 응답한다:
Error: expected 400 "Bad Request", got 404 "Not Found"
at Test._assertStatus (node_modulessupertestlibtest.js:268:12)
at Test._assertFunction (node_modulessupertestlibtest.js:283:11)
at Test.assert (node_modulessupertestlibtest.js:173:18)
at Server.assert (node_modulessupertestlibtest.js:131:12)
at emitCloseNT (net.js:1659:8)
at _combinedTickCallback (internal/process/next_tick.js:135:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
위와 같이 오류가 발생하는데 원인을 못찾겠네요..
따라한다고 따라하는데 위 부분만 안됩니다..
왜그럴까요??
1시간째 돌려보면서 코드 계속 다시 따라쳐보는데 역시나 계속 저 코드만 에러가 나요
답변을 작성해보세요.
2
쾌활한 호랑이
2018.10.30
const user = users.filter((user) => { return user.id === id; })[0];
user.id === id 를 return user.id ===id 로 return 해주어야 합니다
답변 1