如何检查是否在 Jest 中调用了静态方法?

时间:2021-02-08 12:10:41

标签: javascript ecmascript-6 jestjs enzyme

我有 ES-6 类,它具有静态方法。如何在 Jest 中模拟它们以测试它们是否被调用?

我有 3 个文件

  1. 记录器
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    progressBar = view.findViewById(R.id.progressBarHome);
    progressBar.setVisibility(View.VISIBLE);
}
  1. 行动
class Logger {
  static log = (err) => {
    console.log(err);
  }
}
export default Logger;
  1. 测试文件
// import Logger './Logger';
export const myAction = () => {
  handleRequest(params).then((response) => {
    // Statements
  }).catch((err) => {
    Logger.log(err);
  });
};

2 个答案:

答案 0 :(得分:2)

您可以使用jest.spyOn(object, methodName)

import Logger './Logger';
import {myAction} from './action';

it('should call Logger', async () => {
  const spy = jest.spyOn(Logger, "log");
  await myAction();
  expect(spy).toHaveBeenCalled();
});

import Logger './Logger';
import {myAction} from './action';

it('should call Logger', () => {
  const spy = jest.spyOn(Logger, "log");
  return myAction().finally(() => {
    expect(spy).toHaveBeenCalled();
  });
});

答案 1 :(得分:0)

您可以在创建实例之前修改类。

const foo = jest.fn()
const bar = jest.fn()

MyClass.foo = foo
MyClass.bar = bar

const myClass = new MyClass()

myClass.foo()

expect(foo).toHaveBeenCalled()

如果这是正确的方法取决于测试的方式MyClass

编辑:老实说,我认为@lissettdm 的回答是一种更好的方法

相关问题