1

我正在尝试使用 chai-as-promised 来测试我用 bluebird promises 编写的一段代码。

我要测试的方法返回一个 Promise 拒绝,如下所示:

  /**
   * Creates a new user entry in the database.
   * @param {JSONObject} userData -- User details for creation.
   * @return => {boolean} true if succefully created, false otherwise.
   **/
  createUser: function(userData) {
    return Promise.reject();
  },

测试代码是这样的:

    describe('User creation test suite', function() {
        it('Should successfully create root user', function(done) {
            expect(users.createUser(sampleUsers.raam))
                .to.eventually.have.property('id').and.notify(done);
          //expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done);
        });

尽管该方法故意失败,但测试用例被标记为通过。这是输出。

用户创建测试套件

  ✓ Should successfully create root user

如果我直接使用硬编码字符串进行测试,例如

expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done);

然后它似乎工作。我在这里做错了什么?

编辑 我发现它与蓝鸟承诺或我正在测试的方法无关。一个简单的硬编码拒绝也不能正常工作。那是...,

expect(Promise.reject({foo:'bar'})).to.eventually.have.property('id').and.notify(done)

返回通过,而不是失败。我在这里做错了什么吗?

4

1 回答 1

0

调用将回调传递给您的 Mocha 测试,然后在执行完成时调用它(就像您正在处理done回调一样)只是在 Mocha 中处理异步代码的一种方法。另一种方法是简单地从您的测试中返回一个承诺,您可以从chai-as-promised. 尝试像这样修改您的测试:

it('Should successfully create root user', function() {
    return expect(users.createUser(sampleUsers.raam)).to.eventually.have.property('id');
});
于 2016-10-11T17:47:20.290 回答