支持环回模型

时间:2016-03-11 01:18:58

标签: node.js loopbackjs strongloop

在单元测试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()


    })
})

1 个答案:

答案 0 :(得分:1)

有两种可能的解决方案。首先是手动宣传。 您的功能将如下所示:

output.dat

第二种解决方案是使用库来达到同样的目的。

  1. var q = require(' q'); //使用q库
  2. 请勿修改您的模型。它们必须将回调作为最后一个参数(遵循节点约定)
  3. var server.models.Student.upsertWithPromice = q.denodeify(server.models.Student.upsert);
  4. 利润。
  5. 然后您的示例中的代码应该可以正常工作。