【发布时间】:2021-12-04 18:53:27
【问题描述】:
我正在编写一个rejectOnTimeout() 函数,如果该承诺未在ms 中完成,则该函数应返回一个带有timeout_error 值的被拒绝承诺,或者返回一个反映原始承诺行为的承诺。
我认为我得到的答案是正确的。但是我不明白错误Expected one assertion to be called but received zero assertion calls的含义。
在这种情况下我做错了什么?
const delay = require('delay');
/**
* @param {Promise} original promise
* @param {Number} ms for timeout
* @return {Promise}
*/
const rejectOnTimeout = (promise, ms) => new Promise((resolve, reject) => {
const start = Date.now();
promise.finally(() => {
const time = Date.now() - start;
if (time <= ms) {
resolve(promise);
}
reject('timeout_error');
});
});
// Test 1 [PASSED]
rejectOnTimeout(Promise.resolve(10), 100)
.then(data => console.log(data)) // 10
.catch(err => console.error(err));
// Test 2 [PASSED]
rejectOnTimeout(Promise.reject(10), 100)
.then(data => console.log(data))
.catch(err => console.error(err)); // 10
// Test 3 [FAILED], REASON: Expected one assertion to be called but received zero assertion calls.
const delayed = delay(100, { value: 10 });
rejectOnTimeout(delayed, 50)
.then(data => console.log(data))
.catch(err => console.error(err)); // timeout_error
测试代码:
describe('rejectOnTimeout', () => {
it('rejectOnTimeout, 01', async() => {
expect.assertions(1);
await expect(rejectOnTimeout(Promise.resolve(10), 100)).resolves.toBe(10);
});
it('rejectOnTimeout, 02', async() => {
expect.assertions(1);
await expect(rejectOnTimeout(Promise.reject(10), 100)).rejects.toBe(10);
});
it('rejectOnTimeout, 03', async() => {
expect.assertions(1);
const delayed = delay(100, { value: 10 });
await expect(rejectOnTimeout(delayed, 50)).rejects.toBe('timeout_error');
});
it('rejectOnTimeout, 04', async() => {
expect.assertions(1);
const delayed = delay.reject(100, { value: 10 });
await expect(rejectOnTimeout(delayed, 50)).rejects.toBe('timeout_error');
});
it('rejectOnTimeout, 05', async() => {
expect.assertions(1);
const delayed = delay(100, { value: 10 });
await expect(rejectOnTimeout(delayed, 1000)).resolves.toBe(10);
});
it('rejectOnTimeout, 06', async() => {
expect.assertions(1);
const delayed = delay.reject(100, { value: 'error' });
await expect(rejectOnTimeout(delayed, 1000)).rejects.toBe('error');
});
【问题讨论】:
-
我们也可以有测试代码吗?
-
是的,我添加了它
标签: javascript promise jestjs