承诺拒绝或履行混淆

时间:2017-07-04 08:44:16

标签: javascript node.js unit-testing testing promise

我有一个承诺函数

create(data) {
        return new Promise((resolve, reject) => {
            const datetime = Date.parse(new Date());
            data.createdAt = datetime;
            data.updatedAt = datetime;
            this._db.collection(this._table).insertOne(data, (err) => {
                if (err) {
                    this._logger.error(err);
                    reject(err);
                } else {
                    resolve(data);
                }
            });
        });
    }

为它编写单元测试

it('should reject insertion', () => {
    const promise = Agent.create(data).then(() => (Agent.create(data)));
    return expect(promise).to.be.rejected;
});

这个断言通过了。但如果单元测试是:

it('should reject insertion', () => {
    const promise = Agent.create(data).then(Agent.create(data));
    return expect(promise).to.be.rejected;
});

失败了。错误为AssertionError: expected promise to be rejected but it was fulfilled with { Object (_id, role, ...) }

这两种做法之间的区别在哪里?我还没有得到它。

1 个答案:

答案 0 :(得分:1)

正如评论中的许多人所指出的那样,你在第一种情况下传递一个函数,在另一种情况下传递返回值,这是一个承诺。这就是你看到结果差异的原因。