2017-06-05 155 views
2

語境測試與節點,摩卡和柴(應該/ BDD語法)

我是一個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); 

這是一個可行的選擇,因爲我只有幾十個測試。但我仍然對找到上述問題的答案感興趣。

回答