1

誓約を使用して非同期関数の (潜在的な) インターリーブをテストする方法はありますか?

例えば:

// Topic portion
var user = new User('jacob')
user.set('email,'foo@bar.com')
user.save() // a
user.set('email',derp@cherp.com')
user.save() // b
user.refresh(this.callback) // Reload from database

// Callback
assert.equals(user.email,'derp@cherp.com')

2 つの保存の間に競合状態が発生する可能性があります。テストを作成するときは、API が確実に b が最後に終了するようにする必要があります (そして、電子メールの正しい最終値が得られるようにします)。このように書かれていると、たまたまテストがパスすることがあります。

4

1 に答える 1

1

誓いのドキュメントの例を次に示します。

ネストされたコンテキストは、ネストされたコールバックとして機能し、戻り引数を次のコンテキストに渡します。

ドキュメント: http://vowsjs.org/

{ topic: function () {
    fs.stat('~/FILE', this.callback);
  },
  'after a successful `fs.stat`': {
    topic: function (stat) {
      fs.open('~/FILE', "r", stat.mode, this.callback);
    },
    'after a successful `fs.open`': {
      topic: function (fd, stat) {
        fs.read(fd, stat.size, 0, "utf8", this.callback);
      },
      'we can `fs.read` to get the file contents': function (data) {
        assert.isString (data);
      }
    }
  }
}
于 2011-12-25T04:59:38.913 に答える