在单元测试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一起使用。由于我有很多模型,我在下面初始化,我使用async:
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)
})
})
如何将上面的代码更改为使用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()
})
})
答案 0 :(得分:1)
有两种可能的解决方案。首先是手动宣传。 您的功能将如下所示:
output.dat
第二种解决方案是使用库来达到同样的目的。
然后您的示例中的代码应该可以正常工作。