При модульном тестировании 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) }
})
, но я не увенчались успехом обвязка в обещаниях.
EDIT из ответов ниже ...
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()
})
})
Это потрясающе и чрезвычайно полезно! Вы упоминаете q вместо Bluebird. Является ли q лучше подходящим для такого рода обещаний? – user465342
Оба являются аналогичными библиотеками и имеют почти одинаковые функциональные возможности. Я просто использую Q и имел живой пример. –
Делает смысл. Отредактировав исходный вопрос, я думаю, что это изменения, которые вы предлагаете. Как отмечено в вопросе, не находит id :( – user465342