【发布时间】:2016-06-26 03:02:42
【问题描述】:
在单元测试 Loopback 中,有必要使用带有 upsert 方法的回调。所以例如......而不是像这样写一些东西:
before(function () {
Student = server.models.Student
Course = server.models.Course
Course.upsert({id: 1, key: 'A', department: 'Original department'})
Student.upsert({id: 1, points: 5000})
})
有必要确保回调与 upsert 一起使用。由于我有很多模型,我在下面初始化我使用异步:
before(function (done) {
Student = server.models.Student
Course = server.models.Course
async.waterfall([
function (callback) {
Course.upsert({id: 1, key: 'A', department: 'Original department'}, callback)
},
function (f, callback) {
Student.upsert({id: 1, points: 5000}, callback)
},
],
function (err, results) {
done(err)
})
})
如何将上面的代码改为使用 Promises,而不是异步?
我的想法是,有了 Promise,我就可以编写一些如下所示的代码:
before(function (done) {
Student = server.models.Student
Course = server.models.Course
Course.upsert({id: 1, key: 'A', department: 'Original department'})
.then(Student.upsert({id: 1, points: 5000})
.then(function(err) { done(err) }
})
但我没有成功地兑现承诺。
编辑从下面的答案...
before(function (done) {
Course = server.models.Course
Course.upsertWithPromise = Promise.promisify(Course.upsert)
Course.upsertWithPromise({id: 1, key: 'A', department: 'Original department'})
.then(done)
}
it.only('Course upsert', function (done) {
Course.findById(1, function (err, course) {
expect(course.id).to.equal(1)
expect(course.department).to.equal('Original department')
done()
})
})
【问题讨论】:
标签: node.js loopbackjs strongloop