Эта строка:
jest.mock("../../helpers/calculate-performance-time.js");
... устанавливает calculatePerformanceTime
в пустую фиктивную функцию, которая возвращает undefined
.
Поскольку getChallenge
возвращает результат вызова calculatePerformanceTime
, он также возвращает undefined
.
Затем, когда эта строка запускается:
const evaluateFunction = value => setResult(getChallenge(value)(inputs));
... он пытается использовать результат getChallenge(...)
как функцию и вызывать его с помощью inputs
, но это не удается, потому что он пытается вызвать undefined
как функцию.
Вам нужно смоделировать calculatePerformanceTime
, чтобы вернуть функцию :
import React from "react";
import Adapter from "enzyme-adapter-react-16";
import { configure, shallow } from "enzyme";
import { ChallengeSolution } from "./ChallengeSolution";
import * as calculatePerformanceTimeModule from "../../helpers/calculate-performance-time"; // import the module
configure({ adapter: new Adapter() });
const mockFunction = jest.fn();
const mockInputData = 1;
jest.mock(`!raw-loader!../../challenges/1.js`, () => "MOCK_RAW", {
virtual: true
});
jest.mock(`!raw-loader!../../challenges/2.js`, () => "MOCK_RAW", {
virtual: true
});
const spy = jest.spyOn(calculatePerformanceTimeModule, 'calculatePerformanceTime');
spy.mockReturnValue(() => { /* this returns a function...fill in the return value here */ });
describe("ChallengeSolutionComponent", () => {
let wrapper;
const tabNumber = 2;
beforeEach(() => {
wrapper = shallow(<ChallengeSolution selectedTab={tabNumber} />);
});
describe("when component was mount", () => {
it("should render form correctly", () => {
const title = wrapper.find(".challenge-solution__title");
const button = wrapper.find(".challenge-solution__button");
button.simulate("click");
expect(spy).toHaveBeenCalled(); // Success!
expect(title.text()).toEqual(`Daily Coding Solution #${tabNumber}`);
});
});
});