Я обнаружил, что вам нужно использовать функцию awaitPromises
для запуска реактивности и обеспечения полного распространения входов.
Так, например, мой последний тест выглядит так:
it('Logs in user via form', async () => {
const wrapper = mount(LoginCard, {
mocks: { $auth: mockAuth }
});
const inputs = wrapper.findAll({ name: 'BInput' });
expect(inputs.length).toEqual(2);
wrapper.find('input[type="email"]').setValue(email);
await flushPromises();
wrapper.find('input[type="password"]').setValue(password);
await flushPromises();
wrapper.find('form').trigger('submit.prevent');
await flushPromises();
expect(strategy).toBe('local');
expect(data).toEqual({
data: { user: { email: email, password: password } }
});
});
Где mockAuth высмеивает глобальный $ auth Nuxt:
const mockAuth = {
loginWith: (_strategy, _data) => {
return new Promise((resolve, reject) => {
strategy = _strategy;
data = _data;
if (error) {
reject(new Error(errorMessage));
} else {
resolve();
}
});
}
};
Это более многословно, чем я бы предпочел, но мне нравится, что он использует простые входные данные для проверки желаемого результата.
Вы также можете использовать wrapper.setData(...)
для ручной установки адреса электронной почты и пароля перед отправкой формы, но мне это не нравится по нескольким причинам:
Вы по сути настраиваетенекоторые приватные переменные для проверки вашего кода
Вы можете войти и удалить элементы ввода, и ваши компоненты по-прежнему будут проходить, даже если на самом деле они совершенно непригодны.1022 *