Я использую axios-mock-adapter
, чтобы смоделировать мой API, он работает правильно, но при одном макете он возвращает ошибку 404, и я не могу найти, почему.
Здесь здесь песочница с тестом, вы можете видеть, когда мы запускаем тест, вторая проверка завершилась неудачно, потому что вызов axios POST
не был ложным. Я пытаюсь удалить часть заголовка, но песочница просто вылетает, когда я запускаю тест.
Макет API (тестовая часть):
import axios from "axios";
import MockAdapter from 'axios-mock-adapter';
import Utils from "../Utils/Utils";
// Global variable for post request with axios
global.users_post = axios.create({
baseURL: "http://localhost:5000/api/",
headers: {'Content-Type': 'application/json'}
});
/* Mockup API */
var userMock = new MockAdapter(users_post);
const user_resp_full = {
data: {
first_name: "Test",
last_name: "Test",
email: "test@gmail.com",
address: "Test",
zipcode: 1010,
city: "Test",
admin: false
}
}
const testAPI = () => {
userMock
.onPost("users", user_resp_full, Utils.getAuth())
.reply(200, {data: {status: "success"}});
}
test("something", async () => {
let tree = shallow(<UserManage type="create" uuid="" />);
testAPI();
await flushPromises();
// Some test
tree.find("#confirm-create").simulate("click");
await flushPromises();
// Error 404, mock isn't trigger
})
Я уже проверил, данные такие же, как и для конечной точки, но, похоже, это не корректно.
Вызов Axios в классе:
function (fields) {
users_post.post("users", fields, Utils.getAuth())
.then(resp => {
let data = resp.data;
// Do something
})
.catch(resp => {
let data = resp.response.data;
// Display error
});
}
На данный момент в моем тесте Jest он возвращает ошибку 404, поэтому он не издевается над моим API конечной точки (Другие работы).
Функция Utils.getAuth()
возвращает заголовок с токеном авторизации.
Отправка данных
Относительно содержимого отправляемых данных (первый - перед тестовым вызовом с mock, второй - в тестируемой функции, а журнал данных - это данные, отправляемые в API):
console.log src/tests/UserManage.test.js:222
POST USER 2
{"first_name":"Test","last_name":"Test","email":"test@gmail.com","address":"Test","zipcode":1010,"city":"Test","admin":false}
console.log src/Components/Users/UserManage.js:152
POST USER
console.log src/Components/Users/UserManage.js:153
{"first_name":"Test","last_name":"Test","email":"test@gmail.com","address":"Test","zipcode":1010,"city":"Test","admin":false}
<ч>
Обновление
Эта ошибка возникает, только когда я использую POST
запрос с таким заголовком:
axios.post("http://localhost/api/user/update", {name: "Test"}, {headers: {"Authorization": "Bearer token")}});
Я вижу на тестовой странице github axios-mock-adapter , что в итоге мы должны поставить headers
в тест без метки:
{headers: {Autorization: "Bearer token"}}
становится {Autorization: "Bearer token"}
Но, к сожалению, это не работает лучше, чем у меня.
Решение
С ответом Мэтта Карлотты и его кодов и ящиков я модифицирую мой двумя примерами исправленных ошибок:
- Тест
POST
запрос макета с использованием axios *
- Проверка
POST
запроса макета с использованием экземпляра axios *
* С axios-mock-adapter