我正在尝试创建我的第一个 Vue.js 2.x 测试,我可以使用一些帮助:
出于某种原因,模拟仅适用于 .spec 文件中定义的函数,而不适用于导入的函数。
例如,以下代码有效:
// login.spec.js file - note "login" is defined here (which uses "axios" mock)
function login(email, password) {
// I'm defined inside the spec file!
let payload = { email, password };
return axios.post(loginApiUrl, payload);
}
jest.mock('axios');
beforeEach(() => {
jest.clearAllMocks()
})
describe('Login.vue', () => {
it('sample test', async () => {
const data = { a: 1 };
axios.post.mockResolvedValueOnce(data);
let res = await login('abcd@example.com', 'password')
expect(axios.post).toHaveBeenCalledTimes(1)
// The mock works!
虽然没有:
// login.spec.js file
import auth from '@/api/auth.js'
jest.mock('axios');
beforeEach(() => {
jest.clearAllMocks()
})
describe('Login.vue', () => {
it('sample test', async () => {
const data = { a: 1 };
axios.post.mockResolvedValueOnce(data);
let res = await auth.login('abcd@example.com', 'password')
expect(axios.post).toHaveBeenCalledTimes(1)
// This doesn't work (fetching the original URL)
// auth.js
import axios from 'axios'
import { loginApiUrl } from '../helpers/constants'
const auth = {
login(email, password) {
// params are string payloads login request
// return: axios Promise
let payload = { email, password };
console.log('login')
return axios.post(loginApiUrl, payload);
}
}
export default auth;
注意第二个代码调用了实际的 URL(没有模拟)
有人有想法吗?
提前致谢。