javascript - 包装函数的 Jest 单元测试示例

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

但我一定没有正确理解模拟或 spy 。有什么建议吗?

最佳答案

你或许可以用这样的东西来测试它。只需去掉依赖项,这样您就可以控制一切。

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

我还没有运行过这些,但我认为总体思路是可行的。进行错误测试会非常相似。

关于javascript - 包装函数的 Jest 单元测试示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52750775/

相关文章:

javascript - 在ReactJS中加载时添加加载动画

typescript - Bazel 抛出 "Module ts-jest in the transform option was not found"的 Jest 测试

javascript - 在开 Jest 中模拟 react ref 的当前值以进行浅层测试

jestjs - jsdom 错误 : utf-8 is not recognized as encoding for HTML

javascript - 我们如何在 Jest 中使用 React hooks 模拟 React 组件的状态值

javascript - 防止$('img').click触发多次

javascript - 是否可以用普通的 Laravel 创建一个网络聊天应用程序

javascript - 如何将图像(在 Canvas 后面)推到前面以使其 onclick 功能起作用

javascript - 为什么添加分号有时会破坏 if 语句?

javascript - 使用样式化组件 themeProvider 开 Jest