誓言:测试异步交错

时间:2011-12-25 03:32:49

标签: testing node.js vows

是否有一种方法可以测试(潜在的)异步函数与誓言的交错?

例如:

// 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')

两次扑救之间可能存在竞争条件。在编写我的测试时,我想确保我的API确保b完成最后(并且我们拥有正确的电子邮件最终值)。按照它编写的方式,测试将在某些时候巧合地通过。

1 个答案:

答案 0 :(得分: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);
      }
    }
  }
}