我有一個承諾函數承諾或拒絕履行混亂
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, ...) }
這兩種做法的區別在哪裏?我沒有得到它。
你問'()=> Agent.create(data)'和'Agent.create(data)'之間的區別是什麼? – Ryan
區別在於將函數傳遞給'.then'(這是所期望的),並將函數的結果(本例中爲Promise)傳遞給'.then' ...,然後忽略任何傳遞給它的非函數參數以及由'.then'返回的結果諾言都會承擔前面諾言的價值 - 當然這是一個已解決的問題,而不是被拒絕的承諾 –
@JaromandaX當我認爲,他們會屈服如果我將第二個更改爲 'Agent.create(data).then(Agent.create(data).catch ...)' 或 'Agent.create(data).then(Agent .create(data))。catch' – necroface