说我有以下顺序:
vows.describe('Example').addBatch({
'An example' : {
topic: new Example(),
'with an async method' : function(example) {
example.asyncMethod(this.callback);
},
'will do some magic' : function(err, result) {
assert.equal(result.magical, true);
},
'and then we will be back on track' : function(example) {
assert.isTrue(example.backOnTrack);
}
}
}).run();
测试“and then we will be back on track
”是否可以使用之前的主题(Example
)?
修改
vows.describe('Example').addBatch({
'An example' : {
topic: function(example){ // <- where example is a parent topic
example.asyncMethod(this.callback);
},
'callback after an async method will do some magic' : function(err, result) {
assert.equal(result.magical, true);
},
'and then we will be back on track' : function(example) {
assert.isTrue(example.backOnTrack);
}
}
}).run();
答案 0 :(得分:3)
主题会返回一个主题,该主题将发送给您的所有誓言。
首先发誓"with an async method"
this.callback
是未定义的,因为回调仅在主题中定义。在第二个誓言中,参数是example
而不是err, result
如果您要进行任何异步测试,则需要为主题设置功能并使用this.callback
或从主题中返回EventEmitter
。
修改强>
您遇到的问题是从誓言中返回多个主题。这是不可能的。
最简单的解决方案是返回一个包含两个主题的数组的新主题。这感觉很乱。
更好的解决方案是确保您单独测试您的主题。基本上你的测试是“副作用”已成功发生。副作用永远不会发生
答案 1 :(得分:0)
据我了解,topic
是否使用简单的topic: something
或topic: function(...
语法,仅执行一次。当誓言按顺序执行时,在第二个示例中,您将处理修改后的example
。
我会采用简单但有点烦人的方法将两个测试分成子上下文并有两个topic: new Example()
个实例。