#javascript #jestjs #axios
#javascript #jestjs #axios
Вопрос:
У меня возникли проблемы с размещением моих данных ответа для макета axios. Если я включу данные в макет файла, тест пройдет. Если я включу его в тест axiosMock.get.mockResolvedValue();
, он этого не сделает. Мне не нужен ответ в макетном файле, потому что этот файл должен работать со всеми тестами axios.
Если я включу свой ответ в макетный файл axios следующим образом, все будет работать так, как ожидалось.
// __mocks__/axios.js
export default {
create: jest.fn(() => ({
get: jest.fn().mockResolvedValue({
data: {
data: [
{
label: 'Started',
value: 'started',
type: 'Milestone',
},
{
label: 'Detected',
value: 'detected',
type: 'Milestone',
},
{
label: 'Acknowledged',
value: 'acknowledged',
type: 'Milestone',
},
],
},
}),
interceptors: {
request: { use: jest.fn(), eject: jest.fn() },
response: { use: jest.fn(), eject: jest.fn() },
},
})),
get: jest.fn(),
};
Мой тестовый файл:
// Condition.spec.js
test('fetches and displays data', async () => {
axiosMock.get.mockResolvedValue();
const { container } = render(
<Condition {...props} />
);
await wait(() => expect(container.textContent).toContain('Current milestone is Acknowledged'));
expect(container).toBeDefined();
});
Если я удалю его из макетного файла и помещу в тест, он завершится с ошибкой:
// __mocks__/axios.js
export default {
create: jest.fn(() => ({
get: jest.fn().mockResolvedValue(),
interceptors: {
request: { use: jest.fn(), eject: jest.fn() },
response: { use: jest.fn(), eject: jest.fn() },
},
})),
get: jest.fn(),
};
// Condition.spec.js
test('fetches and displays data', async () => {
axiosMock.get.mockResolvedValue({
data: {
data: [
{
label: 'Started',
value: 'started',
type: 'Milestone',
},
{
label: 'Detected',
value: 'detected',
type: 'Milestone',
},
{
label: 'Acknowledged',
value: 'acknowledged',
type: 'Milestone',
},
],
},
});
const { container } = render(
<Condition {...props} />
);
await wait(() => expect(container.textContent).toContain('Current milestone is Acknowledged'));
expect(container).toBeDefined();
});
Как мне получить данные ответа из макетного файла в сам тест?
Комментарии:
1. Как это
axiosMock
определяется?2. Просто импорт axios:
import axiosMock from 'axios';
3. Значит, вы тоже где-то издеваетесь над
axios
модулем, напримерjest.mock('axios')
?4. Приведенный
__mocks__/axios.js
выше файл является макетом axios.5. Вам нужен
__mocks__/axios.js
файл даже после перемещения макетных данных? В противном случае удалите его и используйтеjest.mock('axios')
вместо него для макетаaxios
.
Ответ №1:
Попробуйте это —
import firehydrantAPI from '../../helpers/firehydrantAPI'
jest.mock('../../helpers/firehydrantAPI');
const data = {
"data":[
{
"label":"Started",
"value":"started",
"type":"Milestone"
},
{
"label":"Detected",
"value":"detected",
"type":"Milestone"
},
{
"label":"Acknowledged",
"value":"acknowledged",
"type":"Milestone"
}
]
}
firehydrantAPI.get.mockImplementation(() => Promise.resolve({ data }));
Комментарии:
1. Нет кубиков. Извините.
2. данные не определены
3. Вы объявили постоянные данные, как я объявил выше? Я обновил свой ответ, пожалуйста, проверьте еще раз.
4. Я сделал. Это правильные данные, но компонент никогда не получает их в ответе.