Как макетировать функцию, используя машинописный текст в jest, используя jest.fn () - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь смоделировать функцию с именем callApi. Я использую jest.fn (), но у меня появляется сообщение об ошибке:

функция callApi (метод: строка, URL: строка, путь: строка, данные ?: любая): Обещание> Невозможно присвоить 'callApi', потому что это свойство только для чтения. Ts (2540)

Я пытался следовать примерам на примеры шуток

Что не так с моим кодом? Почему у меня появляется сообщение об ошибке.
Часть callApi это импорт axios из "axios";

export function callApi(
  method: string,
  url: string,
  path: string,
  data?: any
) {
  switch (method) {

Тест выглядит следующим образом:

import {runSaga} from 'redux-saga';
import * as api from '../Utilities/api'
import { getPaymentsError, getPaymentsSuccess, IPaymentsAction } from './actions';
import handleFetch from './sagas'


test('should test fetch payments success',async() =>{
const dispatchedActions = [{}];
const mockedPayments = [{
    details: {
    amount: "10000",
    date: new Date(),
    id: 5
  },
  id: 5,
  month: "Feb 2003",
  userID: 3
}];


 api.callApi = jest.fn(() => Promise.resolve(mockedPayments));<----------error here



const fakeStore = {
    dispatch:(action:IPaymentsAction) =>dispatchedActions.push(action)
}
await runSaga(fakeStore,handleFetch).done;
expect(api.callApi.mock.calls.length).toBe(1);
expect(dispatchedActions).toContainEqual(getPaymentsSuccess(mockedPayments));
})

1 Ответ

0 голосов
/ 20 марта 2019

Присвоение jest.fn() плохо работает с типизацией TypeScript.

Используйте jest.spyOn вместо:

test('should test fetch payments success', async (done) => {
  const dispatchedActions = [{}];
  const mockedPayments = [{
    details: {
      amount: "10000",
      date: new Date(),
      id: 5
    },
    id: 5,
    month: "Feb 2003",
    userID: 3
  }];

  const spy = jest.spyOn(api, 'callApi');
  spy.mockImplementation(() => Promise.resolve(mockedPayments));

  const fakeStore = {
    dispatch: (action: IPaymentsAction) => dispatchedActions.push(action)
  }
  await runSaga(fakeStore, handleFetch);done();
  expect(spy.mock.calls.length).toBe(1);
  expect(dispatchedActions).toContainEqual(getPaymentsSuccess(mockedPayments));
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...