javascript - 使用 node、mocha 和 chai 进行测试(should/bdd 语法)

标签 javascript node.js unit-testing mocha.js chai

<分区>

上下文

我是一个 JavaScript 爱好者,为了让我的项目更上一层楼,我尝试在 BitBucket 中设置一个管道来运行我的单元测试(并在以后做其他事情)。

already used Mocha and Chai用于测试,但我在浏览器中使用它,使用设置依赖项并运行测试的 html 页面。

问题

我面临的问题是我无法让 should 语法在 Node 中工作,而我之前确实在浏览器中进行过工作测试。 应该 应该作为 Chai 库的一部分提供。

我用最少的代码初始化了一个新项目,但在这里它也不起作用:should 根本没有分配。

package.json,包括 mocha 和 chai,并设置 mocha 以进行测试。

{
  "name": "testtest",
  "version": "1.0.0",
  "description": "Minimal, complete and verifiable example",
  "main": "index.js",
  "dependencies": {},
  "devDependencies": {
    "chai": "^4.0.1",
    "mocha": "^3.4.2"
  },
  "scripts": {
    "test": "mocha -u bdd"
  },
  "author": "GolezTrol",
  "license": "ISC"
}

test/test-foo.js,包含测试。我唯一添加的是第一行 require。以前,浏览器包含该文件,而 Foo 是全局的。 我回应了 sut,给了我 5 和 sut.should 给了我未定义的。

var Foo = require('../src/foo.js').Foo;

describe('Foo', function(){
  it('should flurp gnip snop', function() {
    var sut = Foo.flurp();
    console.log(sut); // 5
    console.log(sut.should); // undefined
    sut.should.be.closeTo(5.00000, 0.00001);
  });
});

src/foo.js,被测试的实际单元。在旧的设置中, Foo 将是全局的(或者实际上将自己作为属性添加到另一个全局,但现在无关紧要)。我更改了它,所以它被导出为 exports.Foo,所以我可以 require 它。这基本上有效,因为我在测试中确实得到了“5”。

exports.Foo = function(){}; // Export Foo

var Foo = exports.Foo;

// Give Foo a method
Foo.flurp = function(){
  return 5;
}

我从测试中获得的输出显示“Foo”(描述)、5(记录的结果)和未定义(sut.should 的记录值)。之后,很明显的是正式输出表明测试失败了:

  Foo
5
undefined

<clipped for brevity>

  1) Foo should flurp gnip snop:
     TypeError: Cannot read property 'be' of undefined
      at Context.<anonymous> (test\test-foo.js:9:15)

备选

我可以通过添加这一行来更改所有现有的单元测试:

var expect = require('chai').expect;

并将断言的语法更改为

expect(sut).to.be.closeTo(5.00000, 0.00001);

这是一个可行的替代方案,因为我只进行了几十次测试。但我仍然有兴趣找到上述问题的答案。

最佳答案

您需要调用 should method在开头添加所有的should原型(prototype)

let should = chai.should();

关于javascript - 使用 node、mocha 和 chai 进行测试(should/bdd 语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44370441/

相关文章:

javascript - 如何使用 JavaScript 将 XML 发布到 iframe

node.js - Node 中的 Mocking 依赖(主要用于单元测试)

node.js - Node 代理网络套接字如何检查

python - 我想模拟打开一个现有的测试文件,对其应用一个函数进行测试,但不更改文件的实际内容

javascript 无效函数

javascript - 无法从 Ajax 请求中读取 Javascript 对象

javascript - 如何避免 JavaScript VM 被 CPU 绑定(bind)任务阻塞

unit-testing - 有没有获得 Apex 代码的代码覆盖率报告的好方法?

ios - 使用 OCMock 模拟类选择器

javascript - d3js - 平滑永动的 SVG 圆