如何在Jest中加载类?

时间:2019-02-18 23:29:55

标签: javascript ecmascript-6 jestjs yarnpkg

所以这个问题看起来真的很愚蠢,但是我一直在搜寻,却没有找到答案。

我正在尝试对未使用React或任何其他框架的自定义javascript项目进行单元测试的Jest框架。我的项目结构目前看起来像这样:

  • 项目
    • js
      • main.js <-我的所有类都在这里,采用es6风格,如果那很重要
    • -测试-
      • card.test.js <-测试在这里

在main.js里面定义了Card类。我怀疑该文件是否存在任何问题,因为我已经在浏览器中很好地运行了该文件。

"use strict";

class Card 
{
  ...
}

到目前为止,我写的一个测试只是为了看看它是否有效:

require('../js/main.js');

test("stuff", () => {
    let card = new Card(1, 1);
});

当我尝试运行测试时:

yarn test

但是我得到的只是:

    ReferenceError: Card is not defined

      2 |
      3 | test("stuff", () => {
    > 4 |       let card = new Card(1, 1);
        |                  ^
      5 | });

      at Object.<anonymous>.test (__tests__/card.test.js:4:13)

似乎正在加载main.js,因为如果在其中添加console.log(),则在运行测试时它会得到输出。那么为什么抱怨没有定义Card?

2 个答案:

答案 0 :(得分:0)

您必须将Cards导出到main.js文件中,才能在其他文件中对其进行访问

// main.js
module.exports = { Card }

然后在测试文件中要求它

const { Card } = require('../js/main.js');

答案 1 :(得分:0)

尽管使用了ES6模块,但是我得到了一些似乎可行的东西。

  1. 我将main.js中的所有类都更改为模块(以及将它们分成views.js,controllers.js和models.js):
"use strict";

export class Card 
{
  ...
}
  1. 我通过yarn安装了一些babel节点模块:
yarn add --dev @babel/core @babel/cli @babel/preset-env
  1. 我在项目根目录中添加了一个.babelrc文件:
{
    "presets": ["@babel/preset-env"]
}
  1. 我更改了测试以匹配Andre的建议
const { Card } = require('../js/models.js');

test("stuff", () => {
    let card = new Card(1, 1);
});

现在运行时没有错误

yarn test