无法阅读财产“use_env_variable'未定义的

时间:2017-09-28 01:56:33

标签: javascript node.js express testing jestjs

我正在使用https://github.com/sequelize/sequelize来学习使用数据库迁移。这很好。

下一步,我希望能够运行测试。我的测试非常简单(不使用与Sequelize相关的任何内容),看起来像

import request from 'supertest';
import app from '../src/app.js';

describe('GET /', () => {
  it('should render properly', async () => {
    await request(app).get('/').expect(200);
  });
});

describe('GET /404', () => {
  it('should return 404 for non-existent URLs', async () => {
    await request(app).get('/404').expect(404);
    await request(app).get('/notfound').expect(404);
  });
});

当我以npm test运行时,我收到错误

➜  contactz git:(master) ✗ npm test

> express-babel@1.0.0 test /Users/harit/bl/sources/webs/q2/contactz
> jest

 FAIL  test/routes.test.js
  ● Test suite failed to run

    TypeError: Cannot read property 'use_env_variable' of undefined

      at Object.<anonymous> (db/models/index.js:11:11)
      at Object.<anonymous> (src/routes.js:3:14)
      at Object.<anonymous> (src/app.js:4:15)
      at Object.<anonymous> (test/routes.test.js:2:12)
          at Generator.next (<anonymous>)
          at Promise (<anonymous>)

Test Suites: 1 failed, 1 total
Tests:       0 total
Snapshots:   0 total
Time:        0.702s
Ran all test suites.
npm ERR! Test failed.  See above for more details.
➜  contactz git:(master) ✗

我是NodeJSExpress的新手,所以不知道这里出了什么问题 该代码位于https://github.com/hhimanshu/contactz

有人可以帮助我了解错误以及如何解决问题吗?

4 个答案:

答案 0 :(得分:0)

而不是npm测试,你能尝试这个命令吗? jest yourfile.js --env = node --runInBand

答案 1 :(得分:0)

我只是使用javascript trim()

  • 之前
 process.env.NODE_ENV()                // return    "development "   with space
  • 之后
 process.env.NODE_ENV.**trim()**                // "development"  no space

这是我的solution

答案 2 :(得分:0)

我是服务器领域的新手,尤其是heroku + node express + sequelize。因此,就我而言,我在Heroku设置上的配置变量是错误的。

NODE_ENV设置为错误的值,例如live而不是production

假设您也在使用Sequelize,则正确值production必须等于config.js

答案 3 :(得分:0)

我今天收到此错误,并已解决。

运行笑话时,默认情况下会将NODE_ENV(process.env.NODE_ENV)设置为“测试”。

如果您使用sequelize-cli生成了基本的sequelize文件,则在sequelize config.json文件中(默认情况下)应使用三种类型的配置选项:“开发”,“测试”和“生产”。 但是我看到您正在使用自己的config.js文件,并且那里没有“测试”选项,只有开发和生产https://github.com/hhimanshu/contactz/blob/master/db/config.js

您正在收到此错误,因为model / index.js文件正在寻找上述“测试”选项,但发现它未定义。具体来说,在https://github.com/hhimanshu/contactz/blob/master/db/models/index.js的第12行,它将发现配置未定义,并在查找未定义的use_env_variable属性时引发错误。

解决方案是将“测试”配置添加到您的config.js文件中。只需复制用于开发的配置,它就可以运行。

*请注意,您可能应该为每种不同类型的配置设置不同的数据库,但这是另一个主题。