describe('some test', function(){
// Could put here a shared variable
it('should pass a value', function(done){
done(null, 1);
});
it('and then double it', function(value, done){
console.log(value * 2);
done();
});
});
上述目前在mocha中不起作用。
解决方案是在测试之间共享一个变量,如上所示。
使用async.waterfall()
这是非常可能的,我真的很喜欢它。有没有办法让它在摩卡中发生?
谢谢!
答案 0 :(得分:52)
最好保持测试隔离,以便一次测试不依赖于在另一次测试中执行的计算。让我们调用应该通过值测试A的测试和应该测试的测试B.需要考虑的一些问题:
测试A和测试B真的是两个不同的测试吗?如果没有,他们可以合并。
测试A是否意味着为测试B提供一个测试夹具?如果是,则测试A应成为before
或beforeEach
来电的回调。您基本上通过将数据分配给describe
。
describe('some test', function(){
var fixture;
before(function(done){
fixture = ...;
done();
});
it('do something', function(done){
fixture.blah(...);
done();
});
});
我已经阅读了Mocha的代码,如果我没有忘记某些内容,则无法调用describe
,it
或done
回调来传递值。所以上面的方法就是它。
答案 1 :(得分:7)
非常同意路易斯所说的,这就是摩卡实际上不支持它的原因。想想你引用的异步方法;如果你的第一次测试失败,你会在其余的测试中失败。
正如你所说,你唯一的办法是将变量放在顶部:
describe('some test', function(){
var value = 0;
it('should pass a value', function(done){
value = 5;
done();
});
it('and then double it', function(done){
console.log(value * 2); // 10
done();
});
});
答案 2 :(得分:3)
也可以添加到套装或上下文对象。
在此示例中,它已添加到套装对象
describe('suit', function(){
before(() => {
this.suitData = 'suit';
});
beforeEach(() => {
this.testData = 'test';
});
it('test', done => {
console.log(this.suitData)// => suit
console.log(this.testData)// => test
})
});