• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

강의내용 따라하는데 오류가 발생하는데 원인을 못찾겠어요.. (사용자 조회 API 성공시)

18.07.10 01:03 작성 조회수 95

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시간째 돌려보면서 코드 계속 다시 따라쳐보는데 역시나 계속 저 코드만 에러가 나요

답변 1

답변을 작성해보세요.

2

쾌활한 호랑이님의 프로필

쾌활한 호랑이

2018.10.30

const user = users.filter((user) => { return user.id === id; })[0];

user.id === id 를 return user.id ===id 로 return 해주어야 합니다