gpt4 book ai didi

javascript - Vue jest 不等待 axios 发布

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:54 25 4
gpt4 key购买 nike

我正在测试登录请求,但 jest 没有调用模拟:

这是我的测试:

const User = '123123'

jest.mock('axios', () => ({
get: jest.fn(),
post: (_url, _body) => new Promise((resolve, reject) => {
if (_body.username != User) return reject({ data: { auth: false } })
resolve({
data: {
auth: true,
data: '123456789789213',
name: 'Indra'
}
})
})
}))

describe('Component', () => {
let actions
let store

beforeEach(() => {
actions = {
logIn: jest.fn()
}
store = new Vuex.Store({
actions
})
})
test('Logins in server', () => {
const wrapper = shallowMount(Login, { store, localVue })

const inputLogin = wrapper.find('[name=login]')
const inputPassword = wrapper.find('[name=password]')

//fake user and password
inputLogin.element.value = User
inputPassword.element.value = 'Indra1234'

wrapper.find('button').trigger('click')
expect(actions.logIn).toHaveBeenCalled()
})
})

这是我的登录功能

methods : {
AuthUser () {
if(this.server == "Selecione um servidor") return this.$swal('Atenção', 'Favor selecionar um servidor!', 'error');
console.log("Solicitando login")
this.loading = true
try {
axios.post(this.server+"/auth",
{
username: this.id,
password: this.password
})
.then(result => {
console.log(result)
if(result.data.auth) {
this.tk = result.data.data
this.nome = result.data.name
this.logIn
setTimeout(() => {
console.log("oi")
$("body, this").css("background-color","#FBF5F3");
// this.$router.push('/home')
this.$eventHub.$emit('logIn', 1);
}, 1000);

} else {
this.loading = false
this.$swal('Atenção', 'Usuário ou senha incorretos!', 'warning');
}
}).catch((er) => {
this.loading = false
this.$swal('Desculpe', 'Ocorreu um erro de comunicação com o servidor!', 'error');
console.log(er)
})
} catch (error) {
this.loading = false
this.$swal('Desculpe', 'Ocorreu um erro ao realizar o login', 'error');
console.log('Erro interno: ', error)
}

}
}

当我运行测试时

enter image description here

请注意控制台日志“Solicitando 登录”已被调用。测试的配置由 Vue cli 3 完成,我使用 https://lmiller1990.github.io/vue-testing-handbook/vuex-actions.html#creating-the-action 作为引用

最佳答案

我没看到你兑现 promise 。您可以尝试使用 flush promise 库吗?

npm i --save-dev flush-promises

然后……

// up top
import flushPromises from 'flush-promises';

//...
wrapper.find('button').trigger('click');
await flushPromises();
expect(actions.logIn).toHaveBeenCalled();

更多信息在这里... https://vue-test-utils.vuejs.org/guides/testing-async-components.html

关于javascript - Vue jest 不等待 axios 发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58124823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com