我决定将导入的函数包装在一个更通用的函数上,因为我可能会在多个地方使用它。一个人将如何编写一个完全覆盖这段代码的单元测试?
import { Auth } from 'aws-amplify';
const signIn = (
username,
password,
successCallback,
errorCallback,
) => {
Auth.signIn(username, password)
.then(user => successCallback(user))
.catch(err => errorCallback(err));
};
export default signIn;
我正在使用Jest。
我尝试过这样的事情:
import signIn from './shared';
test('signIn() executes', () => {
const success = jest.fn(console.log('good!'));
const fail = jest.fn(console.log('bad!'));
signIn('john', 'snow', success, fail);
expect(fail).toHaveBeenCalled();
});
但是我一定不能理解模拟或适当的监视。有什么建议吗?
答案 0 :(得分:2)
您可能可以使用类似的方法对其进行测试。只需将依赖项存根即可,以便您可以控制所有内容。
import signIn from './shared';
import { Auth } from "aws-amplify";
describe("signIn", () => {
afterEach(() => {
jest.restoreAllMocks();
});
it("invokes the success callback on success", done => {
const mockUser = {username: "bob", password: "password"};
// pretend that everything went great, and give back our mock user
jest.spyOn(Auth, "signIn").mockImplementation((a, b) => {
return Promise.resolve(mockUser);
});
const mockSuccessCb = (user) => {
expect(user).toBe(mockUser);
done();
};
const mockErrorCb = (err) => {
// fail the test if this callback is invoked.
done(err);
};
signIn("bob","tom", mockSuccessCb, mockErrorCb);
});
});
我还没有执行任何操作,但是我认为总体思路是可行的。进行错误测试将非常相似。