inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Máy chủ API NodeJS được tạo thông qua phát triển dựa trên thử nghiệm (TDD)

API tra cứu người dùng thành công

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

238

UTF-8

1 câu hỏi đã được viết

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

Câu trả lời 1

2

seokyeongyang3993

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

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

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

0

2271

1

라우터 클래스 질문입니다

0

496

1

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

0

511

1

응답 강의중 질문입니다

0

409

1

요청 형식 강의 질문입니다

0

479

1

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

0

565

2

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

0

442

0

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

2

1530

1

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

0

632

1

bulkCreate 사용법 질문 (해결)

0

443

1

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

0

536

1

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

0

327

1

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

0

735

1

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

0

325

1

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

0

380

1

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

0

399

0

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

0

414

1

에러가 납니다.

0

244

0

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

0

273

1

객체 래핑

0

326

0

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

0

413

2

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

0

288

1

질문드립니다.

0

230

1

궁금해서 올립니다.

0

267

2