vue伪函数实现
Vue 伪函数实现
在 Vue 中,伪函数(mock function)通常用于测试或模拟某些功能。以下是几种常见的实现方式:
使用 Jest 的 mock 函数
在 Vue 测试中,Jest 提供了 jest.fn() 来创建伪函数,常用于模拟事件或方法调用。
const mockFn = jest.fn();
// 在组件中使用
const wrapper = shallowMount(MyComponent, {
methods: {
someMethod: mockFn,
},
});
// 触发调用
wrapper.vm.someMethod();
// 验证调用
expect(mockFn).toHaveBeenCalled();
手动实现伪函数
如果不想依赖测试框架,可以手动创建伪函数来记录调用信息。
function createMockFn() {
const calls = [];
const mockFn = function(...args) {
calls.push(args);
};
mockFn.calls = calls;
return mockFn;
}
// 使用示例
const mockFn = createMockFn();
mockFn('arg1', 'arg2');
console.log(mockFn.calls); // [['arg1', 'arg2']]
Vue 组件中的伪事件
在组件中,可以通过 $emit 模拟事件触发,结合伪函数验证事件是否被正确触发。
// 子组件
this.$emit('custom-event', { data: 'test' });
// 父组件测试
const wrapper = shallowMount(ParentComponent);
const mockFn = jest.fn();
wrapper.vm.$on('custom-event', mockFn);
// 触发子组件事件
wrapper.find(ChildComponent).vm.$emit('custom-event', { data: 'test' });
expect(mockFn).toHaveBeenCalledWith({ data: 'test' });
模拟 API 调用
在测试异步逻辑时,可以模拟 API 调用返回伪数据。

// 伪函数模拟 API
const mockApi = {
fetchData: jest.fn().mockResolvedValue({ data: 'mock' }),
};
// 在组件中注入
const wrapper = shallowMount(MyComponent, {
mocks: {
$api: mockApi,
},
});
// 触发调用并验证
await wrapper.vm.loadData();
expect(mockApi.fetchData).toHaveBeenCalled();
expect(wrapper.vm.data).toBe('mock');
通过以上方法,可以在 Vue 中灵活实现伪函数,满足测试或开发中的模拟需求。






