Как протестировать публичную асинхронную функцию внутри класса с помощью Jest в приложении ReactJS / Typescript - PullRequest
0 голосов
/ 19 сентября 2018

Свойство 'getUsersTotalPayout` не существует для типа typeout Paypi

Мой класс:

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 Ответ

0 голосов
/ 19 сентября 2018
  1. В данный момент вы пытаетесь вызвать метод класса.Поскольку это не static, вы должны сначала создать экземпляр объекта класса.

    let api = new PayoutApi();
    expect(api.getUsersTotalPayout(userId).....)
    
  2. , поскольку jest.mock проверяет модуль не как конечную точку или XHR-запрос, ваш тест попытается отправить живой запрос в / api / get-total-payout.Для этого нужно знать, какую XHR-оболочку вы используете.Скажем, для fetch() есть хороший обёрточник , и библиотеки, подобные axios, также имеют свою эквивалентность.

  3. Что касается самого теста.Это не работает, если вы вызываете метод и делаете expect для его результата.Это должен быть запущенный метод, который должен вызывать сервер, а затем проверять наличие поддельного XHR, если он был вызван с допустимыми параметрами:

    api.getUsersTotalPayout(userId);
    expect(fetch_or_other_wrapper_for_mocking_xhr.get_last_request_method()).toEqual('get', endpoint, userId)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...