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”)
,或者使模拟实现更真实。如果完全忽略实现中的传入参数,则这些测试将通过。