gpt4 book ai didi

javascript - 如何在 ReactJS/Typescript 应用程序中使用 Jest 测试类内的公共(public)异步函数

转载 作者:行者123 更新时间:2023-11-30 20:11:18 24 4
gpt4 key购买 nike

Property 'getUsersTotalPayout` does not exist on type typeof PayoutApi

我的类(class):

import { bind } from 'decko';

import BaseApi from './Base';
import * as NS from './types';

class PayoutApi extends BaseApi {

@bind
public async getUsersTotalPayout(userId: string): Promise<number> {
const params: NS.IGetUsersTotalPayoutRequest = { userId };
const response = await this.actions.get<{ payout: number }>(
'/api/get-total-payout',
params,
);
return response.data.payout;
}
}

export default PayoutApi;

测试文件:

import PayoutApi from './LiquidityPool';

const endpoint = '/api/get-total-payout';

const userId = 'foo';

jest.mock(endpoint, () => ({
getUsersTotalPayout: jest.fn(() => Promise.resolve({ data: { payout: 100.21 } }))
}));

describe('API: getUsersTotalPayout', () => {
it('should make a request when we get images', () => {
// const testApi = new PayoutApi();
expect(PayoutApi.getUsersTotalPayout(userId)).toHaveBeenCalledWith(endpoint, 'GET');
});
});

expect(PayoutApi.getUsersTotalPayout).toHaveBeenCalledWith(endpoint, 'GET'); 上获取该错误

最佳答案

  1. 您目前正在尝试调用类的方法。因为它不是static,所以你应该首先实例化类的对象。

    let api = new PayoutApi();
    expect(api.getUsersTotalPayout(userId).....)
  2. 因为 jest.mock 模拟模块而不是端点或 XHR 请求,您的测试将尝试将实时请求发送到/api/get-total-payout。为了处理它,需要知道您使用的是什么 XHR 包装器。说 fetch()nice wrapper-mocker像 axios 这样的库也有它们的等价物。

  3. 至于测试本身。如果您调用一个方法并对它的结果进行 expect,它就不起作用。它应该是必须调用服务器的运行方法,然后检查是否使用有效参数调用了模拟的 XHR:

    api.getUsersTotalPayout(userId);
    expect(fetch_or_other_wrapper_for_mocking_xhr.get_last_request_method()).toEqual('get', endpoint, userId)

关于javascript - 如何在 ReactJS/Typescript 应用程序中使用 Jest 测试类内的公共(public)异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52394684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com