В модульном тестировании 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)
})
})
Вместо асинхронного, как изменить приведенный выше код, чтобы использовать промисы?
Я думаю, что с промисами я смогу написать некоторый код, который выглядит так:
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()
})
})