Я делаю тест, который включает в себя вызов axios конечным точкам.Я хочу смоделировать вызов к конечной точке и вернуть некоторые пользовательские данные, чтобы я не обращался к серверу каждый раз, когда тестирую.
Вот код действия, которое находится в его собственном действии.js файл.
login ({commit}, user) {
return new Promise((resolve, reject) => {
axios.post('https://backendauth.free.beeceptor.com/api/login', user)
.then(resp => {
console.log('response here')
console.log(resp)
console.log(resp.data)
const token = resp.data.success.token
const user = resp.data.user
localStorage.setItem('token', token)
axios.defaults.headers.common["Authorization"] = "Bearer " + token;
commit('LOGIN_SUCCESS', token, user)
При входе в систему действие вызывает конечную точку, и эта конечная точка возвращает токен, который хранится в локальном хранилище.Токен также добавляется к заголовкам по умолчанию для axios, поэтому мне не нужно подключать токен каждый раз, когда я хочу сделать вызов axios в приложении.
Теперь к тесту.Я написал тест, который успешно издевается над сообщением axios, однако завершается ошибкой при установке заголовков по умолчанию для макета.
Вот ошибка
TypeError: Cannot read property 'headers' of undefined
37 | const user = resp.data.user
38 | localStorage.setItem('token', token)
> 39 | axios.defaults.headers.common["Authorization"] = "Bearer " + token;
| ^
40 | commit('LOGIN_SUCCESS', token, user)
41 | resolve(resp)
42 | })
Вот тест, включающий насмешку
import actions from "../../src/store/actions";
let url = "";
let body = "";
jest.mock("axios", () => ({
post: (_url, _body, config) => {
return new Promise((resolve) => {
resolve({'data' : {'success': {'token' : 'test'}}})
})
},
}))
describe('login action', () => {
it("let the user login and access login success mutator", async() => {
const commit = jest.fn()
const username = 'test'
const password = 'test'
await actions.login({commit}, {username, password})
})
})
Насмешка над шуткой - это полная насмешка, которая при вызове возвращает обещание сданные мне нужны, однако код не удается при попытке установить заголовки.Есть ли способ, которым я тоже могу это высмеять или мне нужно написать макет по-другому?