Я действительно изо всех сил пытался сделать что-то очень простое. Мне нужно написать несколько тестов для приложения Vue.
Сценарий, который я хочу протестировать, следующий:
- Пользователь заполняет форму
- Пользователь отправляет форму
- Значения из формы отправляются бэкэнду в одном объекте
- Сервер отвечает объектом, содержащим поля объекта, который он получил в запросе (плюс некоторые новые поля).
- Приложение Vue сохраняет результат в хранилище Vuex
Я хочу, чтобы мой тест проверял, если после проверки формы запрос сделано, и возвращенные значения должным образом сохранены в хранилище.
Это супер-основа c, но по какой-то причине я не могу заставить тест работать.
У меня есть глобально зарегистрированный компонент, который делает доступ к ax ios доступным с помощью this.api
.
. Итак, в моем тесте у меня есть следующее (файл для этого поста упрощен):
...
import axios from 'axios';
import AxiosMockAdapter from 'axios-mock-adapter';
import flushPromises from 'flush-promises';
// This is the axios setup used in the components
import api from '../../src/mixins/api';
// Components
import MyComponent from '../component.vue';
describe('MyComponent', () => {
// Set up the local vue
...
const wrapper = mount(MyComponent, {
localVue,
...
});
beforeEach(() => {
const instance = axios.create({
baseURL: 'some/url/',
});
wrapper.vm.api = new AxiosMockAdapter(instance);
wrapper.vm.api.onPost('url/').replyOnce(201, { data: { foo: 'bar' } });
});
it('should retrieve the data', async () => {
wrapper.find('#submit').trigger('click');
await flushPromises();
expect(wrapper.vm.$store.state.foo !== undefined).toBe(true);
});
});
Но тест не не успешно Я думаю, что запрос сделан правильно, но к тому времени, когда тест заканчивается, ответ еще не получен. И это несмотря на использование flushPromises()
. Я также пытался использовать setTimeout
, но безуспешно.
Я новичок в модульном тестировании (особенно в интерфейсных приложениях) и понятия не имею, что еще можно попробовать. Nothng работает ... Это очень расстраивает, потому что то, что я пытаюсь сделать, довольно прямолинейно и основно c.
У кого-нибудь есть идеи, что делать?