import { createUser } from '../services';
...
...
handleFormSubmit = () => {
this.setState({ loading: true });
createUser()
.then(() => {
this.setState({
loading: false,
});
})
.catch(e => {
this.setState({
error: e,
});
});
};
Run Code Online (Sandbox Code Playgroud)
it('rejects...', () => {
const Container = createUserContainer(CreateUser);
const wrapper = shallow(<Container />);
return wrapper.instance().handleFormSubmit()
.catch(e => {
console.log("State: ", wrapper.state());
expect(e).toEqual('error');
});
});
Run Code Online (Sandbox Code Playgroud)
export const createUser = function() {
return new Promise((resolve, reject) => {
reject('error');
});
};
Run Code Online (Sandbox Code Playgroud)
测试确实强制代码进入方法中的捕获。所以状态确实被设置为“错误”。
但是在我的测试中,它没有按照我的预期进行操作,而是在测试状态更改之前等待 Promise …
我希望能够测试这个Swal()函数是否被调用。
它被嘲笑,但我不熟悉 Jest 嘲笑库。
这是我的测试设置文件中:
jest.mock('sweetalert2', () => {
return {
Swal: () => {},
};
});
Run Code Online (Sandbox Code Playgroud)
所以我只想返回一个函数。
在我的组件中,Swal 的调用方式如下:
doSomething = () => {
Swal({
title: 'Could not log in',
text: error.message,
type: 'error',
});
};
Run Code Online (Sandbox Code Playgroud)
我认为我的模拟需要返回一个命名方法,因此我可以监视它并检查它是否被调用。
我的测试:
import Swal from 'sweetalert2';
describe('Login Container', () => {
it('calls Swal', () => {
doSomething();
var swalSpy = jest.spyOn(Swal, 'Swal');
expect(swalSpy).toHaveBeenCalled();
});
});
Run Code Online (Sandbox Code Playgroud)
错误:
expect(jest.fn()).tohavebeencalled();
Run Code Online (Sandbox Code Playgroud)
当测试失败时,我应该如何设置我的模拟和间谍