我希望能够测试是否调用此Swal()
函数。
它被嘲笑但我不熟悉Jest模拟库。
这是我的测试设置文件:
jest.mock('sweetalert2', () => {
return {
Swal: () => {},
};
});
所以我只想让它返回一个函数。
在我的组件中,Swal被称为:
doSomething = () => {
Swal({
title: 'Could not log in',
text: error.message,
type: 'error',
});
};
我认为我的模拟需要返回一个命名方法,所以我可以监视它并检查它是否被调用。
我的测试:
import Swal from 'sweetalert2';
describe('Login Container', () => {
it('calls Swal', () => {
doSomething();
var swalSpy = jest.spyOn(Swal, 'Swal');
expect(swalSpy).toHaveBeenCalled();
});
});
错误:
expect(jest.fn()).tohavebeencalled();
如果测试失败,我应该如何设置我的模拟和间谍
答案 0 :(得分:0)
您可以在jest.fn
模拟中返回模拟函数sweetalert.js
:
module.exports = jest.fn();
并按照以下方式编写测试:
import { doSomething } from './doSomething';
import Swal from 'sweetalert';
describe('Login Container', () => {
it('calls Swal', () => {
expect(Swal).toHaveBeenCalledTimes(0);
doSomething();
expect(Swal).toHaveBeenCalledTimes(1);
});
});
请注意,我在示例代码中使用sweetalert
而不是sweetalert2
。
希望这有帮助!
答案 1 :(得分:0)
我希望模拟工厂需要使用default
返回一个对象(因为import Swal正在导入默认模块)。像这样(降低wealalert v1):
// extract mocked function
const mockAlert = jest.fn()
// export mocked function as default module
jest.mock('sweetalert', () => ({
default: mockAlert,
}))
// import the module that you are testing AFTER mocking
import doSomethingThatAlerts from './doSomethingThatAlerts'
// test suite loosely copied from OP
describe('Login Container', () => {
it('calls Swal', () => {
doSomethingThatAlerts();
// test mocked function here
expect(mockAlert).toHaveBeenCalled();
});
});