2017-06-05 116 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); 

这是一个可行的选择,因为我只有几十个测试。但我仍然对找到上述问题的答案感兴趣。

回答