Я пишу интеграционный тест для приложения React, то есть тест, который тестирует множество компонентов вместе, и я хочу имитировать любые вызовы внешних сервисов.
Проблема в том, что кажется, что тест выполняется до того, как выполняется асинхронный обратный вызов, что приводит к сбою моих тестов.
Есть ли что-нибудь вокруг этого? Могу ли я как-то дождаться завершения асинхронного кода вызова?
Вот какой-то плохой псевдокод, чтобы проиллюстрировать мою точку зрения.
Я хотел бы проверить, что когда я монтирую Parent, его дочерний компонент отображает контент, который вернулся из внешней службы, над которым я буду издеваться.
class Parent extends component
{
render ()
{
<div>
<Child />
</div>
}
}
class Child extends component
{
DoStuff()
{
aThingThatReturnsAPromise().then((result) => {
Store.Result = result
})
}
render()
{
DoStuff()
return(<div>{Store.Result}</div>)
}
}
function aThingThatReturnsAPromise()
{
return new Promise(resolve =>{
eternalService.doSomething(function callback(result) {
resolve(result)
}
}
}
Когда я делаю это в своем тесте, он терпит неудачу, потому что он выполняется до того, как запускается обратный вызов.
jest.mock('eternalService', () => {
return jest.fn(() => {
return { doSomething: jest.fn((cb) => cb('fakeReturnValue');
});
});
describe('When rendering Parent', () => {
var parent;
beforeAll(() => {
parent = mount(<Parent />)
});
it('should display Child with response of the service', () => {
expect(parent.html()).toMatch('fakeReturnValue')
});
});
Как мне это проверить? Я понимаю, что angular решает это с помощью zonejs, есть ли эквивалентный подход в React?
expect.assertions()
вещь. Я не буду сбрасывать в ответ пример из документа ... - person Adriano Repetti   schedule 27.06.2018