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コールバックはトピックでのみ定義されているため、最初の誓いは未定義です。2番目の誓いでは、引数はexampleありませんerr, result

非同期テストを実行する場合は、トピックに関数を設定し、トピックから を使用this.callbackまたは返す必要がありEventEmitterます。

編集:

あなたが抱えている問題は、誓いから複数のトピックを返すことです。これは不可能です。

最も簡単な解決策は、2 つのトピックの配列である新しいトピックを返すことです。これはハックな気がします。

より良い解決策は、トピックを個別にテストすることです。基本的に、「副作用」が正常に発生したことをテストします。副作用は絶対にあってはならない

于 2011-10-04T09:42:02.113 に答える
0

私が理解している限りではtopic、単純な構文を使用する場合でも、構文を使用する場合でも、 stopic: something一度topic: function(...だけ実行されます。そして、誓いは順番に実行されるため、2番目の例では、変更された.example

2 つのテストをサブコンテキストに分割し、topic: new Example().

于 2011-10-04T02:44:53.753 に答える