2

假设我有以下序列:

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();
4

2 回答 2

3

主题返回一个主题,该主题将发送到您的所有誓言。

在第一个誓言"with an async method" this.callback中未定义,因为回调仅在主题中定义。在第二个誓言中,论点example不是err, result

如果您想做任何异步测试,您需要为您的主题设置一个函数并使用this.callback或从该主题返回一个EventEmitter

编辑:

您遇到的问题是从誓言中返回多个主题。这是不可能的。

最简单的解决方案是返回一个包含两个主题的数组的新主题。这感觉很骇人听闻。

更好的解决方案是确保您单独测试您的主题。基本上你的测试“副作用”已经成功发生。副作用永远不应该发生

于 2011-10-04T09:42:02.113 回答
0

据我了解,topics 无论是使用简单topic: something还是topic: function(...语法,都只执行一次。由于誓言是按顺序执行的,因此在您的第二个示例中,您将处理修改后的example.

我会采取简单但有点烦人的方法,将两个测试分成子上下文并拥有两个topic: new Example().

于 2011-10-04T02:44:53.753 回答