Обеты: тестирование асинхронного чередования
Существует ли методология проверки (потенциального) чередования асинхронных функций с обетами?
Например:
// 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 ответ
Вот пример из документа об обетах:
Вложенные контексты действуют как вложенные обратные вызовы и передают возвращаемые аргументы следующему контексту.
Документы: 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);
}
}
}
}