使用 node、mocha 和 chai 进行测试(should/bdd 语法)
Testing with node, mocha and chai (should/bdd syntax)
上下文
我是一个 JavaScript 爱好者,为了让我的项目更上一层楼,我正在尝试在 BitBucket 中设置一个管道,它将 运行 我的单元测试(并做其他以后的事情)。
我 用于测试,但我在浏览器中使用它,使用 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(记录的结果)和未定义(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原型
let should = chai.should();
上下文
我是一个 JavaScript 爱好者,为了让我的项目更上一层楼,我正在尝试在 BitBucket 中设置一个管道,它将 运行 我的单元测试(并做其他以后的事情)。
我
问题
我面临的问题是我无法让 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(记录的结果)和未定义(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原型
let should = chai.should();