我是一個JavaScript愛好者,並把我的項目到一個新的水平,我試圖建立在一個到位桶管道這將運行我的單元測試(並在稍後做其他事情)。
我already used Mocha and Chai測試,但我使用該設置的依賴關係和運行測試的html頁面中使用它在瀏覽器中。
問題
我現在面臨的問題是,我不能讓should
語法在節點工作,而我也有在瀏覽器前的工作檢查。應該提供should
作爲Chai庫的一部分。
我初始化了一個新的項目,在它最少的代碼,但在這裏它也不起作用:should
根本不分配。
package.json,包括摩卡和柴,並建立摩卡進行測試。
{
"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"
}
測試/測試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;
}
我從測試顯示「富」得到輸出信號(在描述),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);
這是一個可行的選擇,因爲我只有幾十個測試。但我仍然對找到上述問題的答案感興趣。