inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

통합 테스트 해보기

config.json 파일을 불러올 수 없습니다.

521

정민교

작성한 질문수 50

0

안녕하세요 선생님

npm start 실행하면 config파일이 잘 불러와지는데

npm run test를 실행하면 config 파일이 불러와지지 않는 것 같습니다.

 routes/auth.test.js
  ● Test suite failed to run
                                                                                                                                                                                                                                                                                                                    
    TypeError: Cannot read properties of undefined (reading 'database')

      10 | const db = {};
      11 | const sequelize = new Sequelize(
    > 12 |     config.database, config.username, config.password, config,
         |            ^
      13 | );
      14 |
      15 | db.sequelize = sequelize;

      at Object.database (models/index.js:12:12)
      at Object.require (app.js:17:21)
      at Object.<anonymous> (routes/auth.test.js:1:30)

npm run test를 했을 때 뜨는 오류입니다.

{
  "development": {
    "username": "root",
    "password": "비밀번호",
    "database": "nodebird",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },

config/config.json 파일에 developmont도 존재합니다.

const Sequelize = require('sequelize');
const fs = require('fs');
const path = require('path');
const env = process.env.NODE_ENV || 'development';
console.log(env);
const config = require('../config/config')[env];
console.log(config)
const db = {};
const sequelize = new Sequelize(
    config.database, config.username, config.password, config,
);

models/index.js 파일입니다.

npm start를 실행하면 에러없이 실행되고, console.log도 실행되어서 env, config 다 undefined가 아님을 확인했습니다.

어떤 부분이 문제인지 감을 잘 잡지 못하겠습니다.

힌트 좀 주실 수 있을까요?

node.js mysql mongodb express typescript socket.io jwt

답변 2

0

제로초(조현영)

{ "development": { "username": "root", "password": "비밀번호", "database": "nodebird", "host": "127.0.0.1", "dialect": "mysql" }, 이거 development 말고 test때도 넣으셨나요? NODE_ENV가 test가 됩니다. 테스트 시에는요.

0

정민교

안녕하세요 선생님!

{
  "development-home": {
    "username": "root",
    "password": "비밀번호",
    "database": "nodebird",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": "비밀번호",
    "database": "nodebird-test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test-remote": {
    "username": "root",
    "password": "비밀번호",
    "database": "nodebird-test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

test NODE_ENV 추가해서 잘 되었습니다.

회사에서 남아서 자주 공부를 해서 여러 실행 프로필을 만들어두려고 했는데,

위에 처럼 임의로 제가 NODE_ENV를 만들고 적용할 수 있을까요?

npm run test 시에는 test NODE_ENV가 고정인 것 같아서 여쭤봅니다.

test-remote나 test-home 등 이렇게 test시에도 NODE_ENV를 바꿀 수 있었으면 좋겠는데 정보를 찾기가 쉽지 않습니다.

jest 공식 문서도 보고 있는데.. test 시에는 NODE_ENV가 test라고 나오는 내용을 제가 못 찾아서..

NODE_ENV 관련 검색을 해도 예시 값으로 development, production만 계속 보이는 것 같아서 혹시 어떻게 찾으셨는지도 여쭤봐도 될까요?

1

제로초(조현영)

사실 문서에서 굳이 찾으실 필요가 있나 싶습니다. 그냥 console.log(NODE_ENV)하면 test라는 게 보이니까요.

process.env는 언제든 직접 바꿀 수 있습니다. NODE_ENV=test_home jest를 하면 NODE_ENV가 test_home으로 바뀝니다.

0

정민교

감사합니다 많은 도움 되었습니다 선생님!

0

정민교

선생님 죄송한데 질문 다시 한 번만 드리겠습니다..

"test": "set NODE_ENV=test-remote && jest --runInBand",

package.json에 test 스크립트를 위처럼 써 놓았는데

models/index.js에서 똑같이 config를 불러오지 못합니다.

const Sequelize = require('sequelize');
const fs = require('fs');
const path = require('path');
const env = process.env.NODE_ENV || 'development';
console.log('NODE_ENV =', process.env.NODE_ENV);
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(
    config.database, config.username, config.password, config,
);

위에서 process.env.NODE_ENV 를 출력하는 console.log도 실행되지 않습니다.

0

제로초(조현영)

NODE_ENV=test... jest 이렇게 붙여서 하세요.

윈도우면 cross-env 설치 후 앞에 붙이시고요.

0

제로초(조현영)

npm run test를 할 때도 콘솔에 console.log(config)의 결과물이 보여야 합니다. 보이나요?

깃헙 질문

0

82

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

78

1

aws - lightsail 이용 관련

0

59

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

83

2

모듈 사용 시 단점이 있나요?

0

84

1

node.js 버전 및 typescript 적용 문의

0

95

2

12.7. 방장기능(강퇴) 질문드립니다.

0

80

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

69

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

77

2

12.7.1스스로 해보기 질문되나요

0

95

3

시퀄라이즈 실습하기 질문드립니다.

0

196

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

97

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

113

2

구매 결제관련 질문입니다 !

0

123

1

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

0

134

2

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

152

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

123

2

무료/프리미엄 동시 소유 시 질문

0

117

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

136

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

159

2

webstorm 해결할 수 없는 변수 문제

0

155

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

149

2

LightSail 실행 중 오류 질문드립니다!

0

204

2

RedisStore 사용법 질문

0

133

2