首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查静态方法是否在Jest中被调用?

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

Stack Overflow用户
提问于 2021-02-08 12:10:41
回答 2查看 678关注 0票数 3

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

我有3份文件

  1. 记录器
代码语言:javascript
复制
class Logger {
  static log = (err) => {
    console.log(err);
  }
}
export default Logger;
  1. 动作
代码语言:javascript
复制
// import Logger './Logger';
export const myAction = () => {
  handleRequest(params).then((response) => {
    // Statements
  }).catch((err) => {
    Logger.log(err);
  });
};
  1. 测试文件
代码语言:javascript
复制
// import {myAction} from './action';
// import Logger './Logger';
it('should call Logger', () => {
  Logger.log = jest.fn();
  return myAction().then(() => {
    expect(Logger.log).toHaveBeenCalled(); // It is failing
  });
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-08 12:14:48

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

代码语言:javascript
复制
import Logger './Logger';
import {myAction} from './action';

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

代码语言:javascript
复制
import Logger './Logger';
import {myAction} from './action';

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

Stack Overflow用户

发布于 2021-02-08 12:16:20

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

代码语言:javascript
复制
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回答是一种更好的方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66101383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档