Sinon TypeError: Попытка обернуть неопределенное свойство getInternationals как функцию - PullRequest
3 голосов
/ 07 апреля 2020

Я использую Cypress для написания интеграционного теста. Cypress использует Sinon для заглушек и шпионов, поэтому cy.spy = sinon.spy.

Я пытаюсь шпионить за методом из импортированного модуля.

Я импортирую модуль следующим образом : import * as internationals from "../../../src/api/Internationals";

Затем я пытаюсь шпионить за методом внутри api/Internationals, например, так: cy.spy(internationals, "getInternationals");

В результате возникает ошибка:

Ошибка типа: Попытка обернуть неопределенное свойство getInternationals как функция

Содержимое api/Internationals.js:

import ApiClient from "./ApiClient";

export const getInternationals = ({ search, team, from, till, page = 1, per_page = 10, sort_column, sort_direction }) =>
  ApiClient.get(`/players`, {
    params: {
      search: search ? (search === "#" ? "hek" : search) : null,
      team: team ? team : null,
      from: from ? from : null,
      till: till ? till : null,
      page: page,
      per_page: per_page,
      sort_column: sort_column ? sort_column : null,
      sort_direction: sort_direction ? sort_direction : null
    }
  });

Содержимое теста:

/// <reference types="Cypress" />

import * as internationals from "../../../src/api/Internationals";

describe("Can search for internationals", () => {
  it("Remembers filters after refreshing", () => {
    console.log(internationals);
    cy.spy(internationals, "getInternationals");

    expect(internationals.getInternationals).to.be.called;
  });
});

Журнал консоли internationals показывает : enter image description here

Я что-то упустил?

1 Ответ

1 голос
/ 08 апреля 2020

Отслеживая ошибку в консоли, ясно, что Cypress неправильно обрабатывает конструкцию export const getInternationals, но не может понять почему с первого взгляда.


ПРИМЕЧАНИЕ: повторное базирование импорт не работает, оставлено для продолжения обсуждения

Вы можете избежать этой проблемы, шпионя за этим в своем тесте

const spyBase = {
  getInternationals: internationals.getInternationals
}
cy.spy(spyBase, "getInternationals");

expect(spyBase.getInternationals).to.be.called;

Если вы можете изменить Исходный код, добавьте экспорт по умолчанию в модуль

export const getInternationals = ...

export default {
  getInternationals
}

и импортируйте его так:

import internationals from "../../../src/api/Internationals";
...