Я знаю, как имитировать запрос (https://jest -bot.github.io / jest / docs / tutorial-async.html ).Но это не то, что я хочу, так как я хочу, чтобы Jest мог смоделировать результат, полученный из определенной строки URL (например, www.abc.com).
В следующем примере я пытаюсь передатьтест Return default error when script resolved to api end point error
для обещания, которое внедряет скрипт, который загружает контент из URL.
Воспроизвести
clone github.com:adamchenwei/reactjs-jest-playground.git
yarn install
yarn run test
Связанное содержимое файла
loadScriptAsync.js
export default function loadScriptAsync(
scriptUrl,
timeoutDuration,
customLoadName = 'unnamed'
) {
/* istanbul ignore next line: no need to test default 30s duration*/
const FORCED_TIMEOUT_IN_MS = timeoutDuration || 30000;
return new Promise(function(resolveCallback, rejectCallback) {
let script = document.createElement('script');
script.src = scriptUrl;
script.type = 'text/javascript';
script.onError = rejectCallback;
script.async = true;
script.onload = resolveCallback;
script.addEventListener('error', rejectCallback, { once: true });
script.addEventListener('load', resolveCallback, { once: true });
document.head.appendChild(script);
setTimeout(() => {
rejectCallback({
error: `${customLoadName} - load script async promise rejected by timeout`
});
}, FORCED_TIMEOUT_IN_MS);
});
}
loadScriptAsync.test.js
import loadScriptAsync from './loadScriptAsync';
// const mockGetScript = () => new Promise(resolve => resolve(`var abc='1';`));
describe('loadScriptAsync', () => {
it('return error when rejected or timedout after execution', async () => {
expect.assertions(1);
try {
await loadScriptAsync('', 1, 'my custom');
} catch (e) {
expect(e).toEqual({
error: 'my custom - load script async promise rejected by timeout'
});
}
});
it('return default error name when not set', async () => {
expect.assertions(1);
try {
await loadScriptAsync('', 1);
} catch (e) {
expect(e).toEqual({
error: 'unnamed - load script async promise rejected by timeout'
});
}
});
it('return default error when script resolved to api end point error', async () => {
expect.assertions(1);
try {
await loadScriptAsync('www.abc.com', 1000);
} catch (e) {
expect(e).toEqual({
error: '???'
});
}
});
});