Javascript 包装器函数的Jest单元测试示例
我决定将导入的函数包装在更通用的函数上,因为我可能会在多个地方使用它。如何编写一个完全覆盖这段代码的单元测试Javascript 包装器函数的Jest单元测试示例,javascript,jestjs,Javascript,Jestjs,我决定将导入的函数包装在更通用的函数上,因为我可能会在多个地方使用它。如何编写一个完全覆盖这段代码的单元测试 import { Auth } from 'aws-amplify'; const signIn = ( username, password, successCallback, errorCallback, ) => { Auth.signIn(username, password) .then(user => successCallback(
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;
我在开玩笑
我试过这样的方法:
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();
});
但我不能正确理解嘲弄或间谍活动。有什么建议吗?你可以用这样的东西测试一下。只要去掉依赖项,就可以控制一切
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);
});
});
我还没有运行过这一切,但我认为总的想法是可行的。执行错误测试将非常类似。不确定这是否适合您的需要,但有一个内置的功能可以执行与您正在执行的类似的操作。当然可以,但我正在尝试获得100%的覆盖率,因此我仍然必须针对特定函数测试代码代码>处理错误案例,100%实现,谢谢!如果您想获得完全覆盖,您可能需要验证
Auth.signIn
是否也被调用为(“bob”、“tom”)
,或者使模拟实现更真实。如果完全忽略实现中的传入参数,则这些测试将通过。