使用node,mocha和chai进行测试(应该是/ bdd语法)

时间:2017-06-05 13:46:57

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

上下文

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

already used Mocha and Chai进行测试,但是我在浏览器中使用了一个html页面来设置依赖项并运行测试。

问题

我面临的问题是我无法在节点中使用should语法,而我之前在浏览器中确实有过工作测试。 should应作为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(记录结果)和undefined(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);

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

1 个答案:

答案 0 :(得分:1)

您需要致电should method以在开头添加所有原型

let should = chai.should();