인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

정민교님의 프로필 이미지
정민교

작성한 질문수

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

통합 테스트 해보기

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

작성

·

443

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가 아님을 확인했습니다.

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

힌트 좀 주실 수 있을까요?

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

정민교님의 프로필 이미지
정민교
질문자

안녕하세요 선생님!

{
  "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만 계속 보이는 것 같아서 혹시 어떻게 찾으셨는지도 여쭤봐도 될까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

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

정민교님의 프로필 이미지
정민교
질문자

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

정민교님의 프로필 이미지
정민교
질문자

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

"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도 실행되지 않습니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

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

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

정민교님의 프로필 이미지
정민교

작성한 질문수

질문하기