vue.js - Jest / Vue Test Utils - Axios mock 仅适用于测试文件本身
问题描述
我正在尝试创建我的第一个 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(没有模拟)
有人有想法吗?
提前致谢。
解决方案
推荐阅读
- excel - Excel VBA将打印区域附加为PDF
- php - 在 Woocommerce 中设置购物车商品价格后重新计算总计
- android - CMAKE_CURRENT_BINARY_DIR 的 Gradle 模拟是什么?
- python - 通过服务器读取数据时,python f.read() 和 f.seek() 很慢
- java - 如何从 Java URLConnection getContent 获取数据到字符串
- asp.net-mvc - Azure API 网关和 Web 应用程序 - 如何提供 CSS、JS 和图像?
- python - 单击 - 基于其他选项的提示的动态默认值
- android - Activity 与 AppCompatActivity:UI 的区别
- visual-studio - 使用生成的符号在反编译源中的断点处发出“未加载符号”通知
- bash - 使用 gnu-parallel 处理文件内容