我有一个承诺函数
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, ...) }
这两种做法之间的区别在哪里?我还没有得到它。
答案 0 :(得分:1)
正如评论中的许多人所指出的那样,你在第一种情况下传递一个函数,在另一种情况下传递返回值,这是一个承诺。这就是你看到结果差异的原因。