包装功能的示例笑话单元测试

时间:2018-10-11 01:13:57

标签: javascript jestjs

我决定将导入的函数包装在一个更通用的函数上,因为我可能会在多个地方使用它。一个人将如何编写一个完全覆盖这段代码的单元测试?

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();
});

但是我一定不能理解模拟或适当的监视。有什么建议吗?

1 个答案:

答案 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);
    });
});

我还没有执行任何操作,但是我认为总体思路是可行的。进行错误测试将非常相似。

相关问题