javascript - 开 Jest 测试一下解析拒绝回调

标签 javascript reactjs unit-testing promise jestjs

我有这个函数,它调用 util 函数来进行 api 调用。 util 函数根据 api 结果进行解析或拒绝。

现在,我需要对具有以下结构的回调函数进行单元测试。

`theClassMethod : () => {
    return utilMethod().then(
    result => { this.functionOne() //Test this function is called }, 
    error => { this.functionTwo() //Test this function is called }
    )
}`

util 方法返回如下所示的 promise :

utilFunc = (data :string) :Promise<ResultData[]> => {
    return new Promise(async (resolve, reject) => {
        try{
            resolve(data)
        }catch{
            reject(error)
        }
    }) 
}

https://codesandbox.io/s/vjnwy1zw75?fontsize=14

我尝试过的:

  1. 模拟 util 方法来解析/拒绝。调用类方法并进行断言。它不起作用,测试总是误报通过。

我花了很多时间寻找类似的问题。这里的大多数问题都是测试代码,例如:

theClassMethod : () => { utilMethod.then().catch()}

我试图解决的问题是测试then block then(function1, function2)中的resolve、reject回调。必须测试 function1 内的代码块是否调用了一些预期的函数。

最佳答案

您描述的方法(模拟 utilMethod 来解析/拒绝)是一个很好的方法。

这是一个简单的工作示例,可以帮助您入门:

注意:我将 functionOne 实现为类方法,将 functionTwo 实现为实例属性 展示如何监视这两种类型的函数:

util.js

export const utilMethod = async () => 'original';

代码.js

import { utilMethod } from './util';

export class MyClass {
  functionOne() { }  // <= class method
  functionTwo = () => { }  // <= instance property
  theClassMethod() {
    return utilMethod().then(
      result => { this.functionOne() },
      error => { this.functionTwo() }
    );
  }
}

代码.test.js

import { MyClass } from './code';
import * as util from './util';

test('theClassMethod', async () => {
  const mock = jest.spyOn(util, 'utilMethod');

  const instance = new MyClass();

  const functionOneSpy = jest.spyOn(MyClass.prototype, 'functionOne');  // <= class method
  const functionTwoSpy = jest.spyOn(instance, 'functionTwo');  // <= instance property

  mock.mockResolvedValue('mocked value');  // <= mock it to resolve
  await instance.theClassMethod();
  expect(functionOneSpy).toHaveBeenCalled();  // Success!

  mock.mockRejectedValue(new Error('something bad happened'));  // <= mock it to reject
  await instance.theClassMethod();
  expect(functionTwoSpy).toHaveBeenCalled();  // Success!
});

关于javascript - 开 Jest 测试一下解析拒绝回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55857947/

相关文章:

javascript - Filter.js 如何在初始化时过滤 jquery UI slider

c# - 在 C# 中自动测试 "untestable"应用程序。单元/集成/功能/系统测试 - 如何?

javascript - jQuery-webkit-transform yAngle

javascript - 将 javascript 函数应用于相同的 id

javascript - 如何使用 Three.js 中的复选框隐藏/显示 STL 模型

javascript - 无法使用 babel 将 jsx 转译为 js

reactjs - 组件如何对其子组件进行布局?

javascript - 防止 React 重新渲染特定的子组件

unit-testing - 了解Grails的mockFor需求

java - 如何使用 try...catch 为 void 方法创建单元测试?