Я использую Jest с JS и пытаюсь написать тест вокруг X-ray JS-библиотеки, инструментария веб-скрепок. Ниже приведен тест. Это использует Jest 18.x и последние рентгеновские лучи по состоянию на 02/20/2017.Jest async проверяет время ожидания, если «ожидание» вызвано в функции async. Иногда работает. «Асинхронный обратный вызов не был вызван в указанный тайм-аут»
const htmlResponse = require('../__mocks__/html_response'); // just contains {listingsPage: '<html>....</html>';}
describe('scraper',() => {
it("should get David Nichols' latest study from valid HTML", (done) => {
var listingsHtml = htmlResponse.listingsPage;
const Xray = require('x-ray');
const x = Xray();
expect(x).not.toEqual(null);
var parseHtml = x('#Repo tbody tr', { link: 'td:nth-child(1) [email protected]' })
parseHtml(listingsHtml, (err, result) => {
console.log(Object.keys(result));
expect(result.link).toEqual('le test'); // commenting this out causes test to pass.
done();
});
});
Если удалить expect().toEqual
вызов внутри обратного вызова выше done()
тест работает:
PASS src/__tests__/scraper-test.js
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 2.315s, estimated 6s
Ran all test suites related to changed files.
с этой линией, как есть, это тайм-аут. result
- простой объект {link: 'string'}
Тест не вызывает сетевых вызовов. Я попытался обновить значение тайм-аута до 30 секунд без везения.
FAIL src/__tests__/scraper-test.js (5.787s)
● scraper › should get David Nichols' latest study from valid HTML
Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
at Timeout.callback [as _onTimeout] (node_modules/jest-environment-jsdom/node_modules/jsdom/lib/jsdom/browser/Window.js:480:19)
at ontimeout (timers.js:365:14)
at tryOnTimeout (timers.js:237:5)
at Timer.listOnTimeout (timers.js:207:5)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 1 total
Snapshots: 0 total
Time: 6.641s
Ran all test suites related to changed files.