inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

테스트주도개발(TDD)로 만드는 NodeJS API 서버

사용자 조회 API 성공시

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

214

UTF-8

작성한 질문수 1

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

express tdd rest-api nodejs

답변 1

2

쾌활한 호랑이

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

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

curl -X 매개변수를 찾을 수 없습니다

0

2162

1

라우터 클래스 질문입니다

0

444

1

슈퍼 테스트2 강의 질문입니다

0

450

1

응답 강의중 질문입니다

0

331

1

요청 형식 강의 질문입니다

0

431

1

비동기 세계1 강의 내용 질문입니다

0

495

2

오타로 인해 한참을 헤맸네요.

0

396

0

'NODE_ENV'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

2

1474

1

img src부분과 require()에 대해 질문이요!

0

583

1

bulkCreate 사용법 질문 (해결)

0

391

1

api 분리 관련해서 질문 있습니다.

0

485

1

promise 가 넘어올 때 .then 사용법 문의

0

279

1

package-lock 파일은 어떤 용도일까요?

0

686

1

테스트 코드 실행이 안됩니다.

0

279

1

should실행시 mocha 사용하는이유는

0

326

1

expect를 걸었음에도 불구하고 확인하지 않는 이유가 무엇일까요?

0

366

0

안녕하세요. 강의 내용 중 질문있습니다.

0

366

1

에러가 납니다.

0

209

0

강의 중 describe POST 쪽 질문입니다.

0

229

1

객체 래핑

0

286

0

should가 어떻게 저기 나올 수 있죠?

0

357

2

강의자료 pdf 링크에 pdf를 다운받을 수 없는 상황인데 확인 부탁드립니다.

0

246

1

질문드립니다.

0

193

1

궁금해서 올립니다.

0

221

2