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

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

(59개의 수강평)

804명의 수강생
29,700원
지식공유자 · 김정환
60회 수업· 총 3시간 49분수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 '중급'
shhan730@gmail.com 프로필

코드 관련 문의 shhan730@gmail.com 5일 전

강의중 작성하신 코드를 혹시 github에 공개해 주실수 있을까요?
감사합니다.

0
Hyunsang Han 프로필

update는 연동이 잘 안되네요 ㅠ Hyunsang Han 27일 전

써주신 로직 그대로 따랐는데(상세한 코드는 좀 다르게 쓰긴 했지만) 작동이 안되어요. user.name === name 이 true가 나오고 있고, unique설정도 모델에서 해줬는데 말입니다. 문제가 뭘까요?ㅠ

const update = (req, res) => {
const id = parseInt(req.params.id, 10)
const name = req.body.name;
if (!name || Number.isNaN(id)) return res.status(400).end();

// models.User.update를 써도 되지만 아래와 같이 findOne과 save()를 쓸 수도 있음
models.User.findOne({ where: { id } })
.then(user => {
if (!user) return res.status(404).end();
user.name = name;
user.save()
.then(() => {
res.status(203).json(user);
})
.catch(err => {
if (err.name = 'SequelizeUniqueConstraintError') {
return res.status(409).end();
}
res.status(500).end();
})
})
};

0
Hyunsang Han 프로필

데이터베이스 싱크에 대해 조금만 설명 더 부탁드립니다. Hyunsang Han 27일 전

(진짜 강의 너무너무 유익하게 잘 듣고 있습니다.

 제가 들어본 인프런 강의 중 최고예요.)

근데, 데이터베이스 관련해서는 살짝 더 설명주시면 좋을 것 같습니다.

- 데이터베이스와 ORM을 연결?한다는 게 무슨 뜻인지

- 싱크가 무엇이며 왜 하는 것인지(이번 강의에서 매 테스트수트마다 새로 데이터 싱크 과정을 추가했는데, 이렇게 매 테스트마다 수동으로 추가하는 과정이 약간 제가 생각했던 DB의 느낌과 다른 것 같아서요)

위 부분들에 대해 살짝 찝찝하게 넘어갔는데, 답변 달아주시면 대단히 감사하겠습니다.(강사님 아니어도 아시는 수강생분은 답변 부탁드릴게요!)

2
이충만 프로필

혹시 이 부분은 nodejs만의 특징인가요? 이충만 2달 전

아니면 혹시 자바스크립트의 특징으로 보아도 무방할까요?

1
Dot Support 프로필

HTTP Request 값이 2초가 넘어 갈때의 해결법 Dot Support 6달 전

Get요청으로 해당 HTTP를 긁어오는 테스트를 하려고 하는데 모카 테스트에서 2초가 넘어갔다는 이유로 계속 실패합니다. 해결방법이 있나요?

1
오형원 프로필

동영상 재생이 원활하지 않은데요? 20초 간격으로 끊겨서 30초 정도 기다리면 진행이 되네요??? 동영상 재생이 원활하지 않은데요? 20초 간격으로 끊겨서 30초 정도 기다리면 진행이 되네요??? 오형원 6달 전

동영상 재생이 원활하지 않은데요? 20초 간격으로 끊겨서 30초 정도 기다리면 진행이 되네요??? 

0
오형원 프로필

동영상 재생이 원활하지 않은데요? 20초 간격으로 끊겨서 30초 정도 기다리면 진행이 되네요??? 오형원 6달 전

동영상 재생이 원활하지 않은데요? 20초 간격으로 끊겨서 30초 정도 기다리면 진행이 되네요??? 

0
Jiwon 프로필

Wrapping 의 뜻이 잘 이해가 안 갑니다. Jiwon 7달 전

app.get('/', function(req, res){

res.send('Hello World!');

});

 

이 부분에서 http 의 req, res를 한번 wrapping 한 express의 객체라고 하셨는데

그 의미가 이해가지 않습니다 ㅜㅜ 

1
참참이 프로필

spec 파일이 여러 개 일 때! 참참이 9달 전

패쓰가 늘어나면서 spec 파일도 늘어났을 때

파일들의 관리와 테스트 수행은 어떻게 하나요?

1
엄창용 프로필

TDD 슈퍼테스트2 강의 중 엄창용 9달 전

이리저리 찾아보는데도 모르겠어서 질문드립니다.

모듈에서 가져온 기능을 못 찾는 거 같은데 원인을 모르겠습니다ㅠㅠ

Web Strom을 사용하고 있습니다.

1) GET /users는

...:

TypeError: app.daddress is not a function

at Test.serverAddress (node_modulessupertestlibtest.js:55:18)

at new Test (node_modulessupertestlibtest.js:36:12)

at Object.obj.(anonymous function) [as get] (node_modulessupertestindex.js:25:14)

at Context.it (index.spec.js:7:14)

//index.js

const express = require('express');

const morgan = require('morgan');

const app = express();

const users = [

{id: 1, name: 'alice'},

{id: 2, name: 'bek'},

{id: 3, name: 'mike'}

];

app.use(morgan('dev'));

app.get('/', function (req, res){

res.send('Hello World!');

});

app.get('/users', function (req,res) {

res.json(users);

});

app.post('/users', function (req,res) {

res.send(user)

});

app.listen(3000, function(){

console.log('Example app listening on port 3000!');

});

module.exports = app;

//index.spec.js

const app = require('./index');

const request = require('supertest');

describe('GET /users는', ()=>{

it('...', (done)=>{

request(app)

.get('/users')

.end((err, res)=>{

console.log(res.body);

done();

})

})

})

2
Julio 프로필

모듈별 테스트 파일들이 많아질 경우, 일괄 테스트 진행할때에는 어떻게 처리하나요? Julio 2018.12.13

모듈별 테스트 파일들이 많아질 경우, 일괄 테스트 진행할 때에는 어떻게 처리하나요?

build 시점에 테스트를 선행해서 문제가 없을 경우 빌드되도록 연계하고 싶을때에는 어떻게 처리하는지도 궁금합니다.

0
Julio 프로필

supertest 관련 코드를 작성하고 mocha로 테스트를 돌린 이후에 Julio 2018.12.12

supertest 관련 코드를 작성하고 mocha로 테스트를 돌린 이후에

프로세스가 종료가 안되고 대기상태로 남아있는데 어떤 부분을 의심해 보면 좋을까요?

1
Julio 프로필

Mocha + Should vs Jasmine Julio 2018.12.12

Jasmine의 경우엔 테스트 러너와 검증을 같이 제공하는것 같은데,

실무환경에서는 Mocha + Should 와 Jasmine 중 어떤것을 많이 사용하는지 궁금합니다.

많이 사용하는 이유가 있다면 이유도 궁금하고요..

0
geundragon 프로필

In Memory DB 관련 질문드립니다~! geundragon 2018.11.06

안녕하세요 강사님 세션을 저장할때 In Memory DB를 사용하면 좋다고 말씀하셨는데,

1.그럼 서버를 재구동하면 세션정보는 다 날아가는건가요?!

  1. 간단한 사이트를 운영하는데 서버쪽 소스를 수정하면 업데이트 하기위해서 매번 서버를 재구동시키는데, 좋지 않은 방법인가요? 라우팅정보만 수정하는 로직을 만들어서 그것만 실행시키는게 좋을까요?

1
Gichul Roh 프로필

강의를 보면서 입력한 코드는 전부 맞는 것 같은데, 에러가 하나 떠서요 Gichul Roh 2018.10.06

PUT /users/3 404 0.752 ms - -

1) 변경된 name을 응답한다

1) PUT /users/:id
성공시
변경된 name을 응답한다:

Uncaught AssertionError: expected Object {} to have property name

```app.put('/users/:id', (req, res) => {
const id = parseInt(req.params.id, 10);
if (Number.isNaN(id)) return res.status(400).end();

const name = req.body.name;
if (!name) return res.status(400).end();

const isConflict = users.filter(user => user.name === name).length;
if (isConflict) return res.status(409).end();

const user = users.filter(user => user.id === id)[0];
if (!user) return res.status(404).end();

user.name = name;

res.json(user);

});

it('변경된 name을 응답한다', (done) => {
const name = 'chally';
request(app)
.put('/users/3')
.send({name: name})
.end((err, res) => {
res.body.should.have.property('name', name);
done();
});
})

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스