Sinon TypeError:尝试将未定义的属性getInternationals包装为函数

问题描述 投票:3回答:1

我正在使用赛普拉斯编写集成测试。赛普拉斯将Sinon用于存根和间谍,因此cy.spy = sinon.spy。

我正在尝试监视导入模块中的方法。

我正在像这样导入模块:import * as internationals from "../../../src/api/Internationals";

然后我尝试监视api/Internationals内部的方法,如下所示:cy.spy(internationals, "getInternationals");

导致此错误:

TypeError:尝试将未定义的属性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

我想念什么吗?

javascript testing integration-testing sinon cypress
1个回答
0
投票

跟踪控制台中的错误,很明显赛普拉斯没有正确处理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";

另一个选项,您可以通过测试中的import语句在不更改源代码的情况下调整模块结构

import * as myModule from "../../app/Internationals";
const internationals = myModule.default;
© www.soinside.com 2019 - 2024. All rights reserved.