javascript - Sinon TypeError : Attempted to wrap undefined property getInternationals as function

标签 javascript testing integration-testing sinon cypress

我正在使用 Cypress 编写集成测试。 Cypress 使用 Sinon 作为 stub 和 spy ,所以 cy.spy = sinon.spy。

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

我正在像这样导入模块:import * as internationals from "../../../src/api/Internationals";
然后我尝试窥探api/Internationals 中的一个方法。像这样:cy.spy(internationals, "getInternationals");
导致此错误:

TypeError: Attempted to wrap undefined property getInternationals as function


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

我错过了什么吗?

最佳答案

跟踪控制台中的错误,很明显 Cypress 没有处理 export const getInternationals构造正确,但不能一目了然。

注意:重新定位导入不起作用,留待讨论

您可以通过在测试中像这样进行 spy 事件来躲避问题

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";

关于javascript - Sinon TypeError : Attempted to wrap undefined property getInternationals as function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081814/

相关文章:

javascript - 重试对 Angular 中另一个来源的失败 API 调用

ruby - let() 值在 before( :all) is used?

java - JUnit4 - 测试方法是否不执行任何操作

java - Spring Boot 1.4 - 如何使用验证来测试 Controller

python - 我怎样才能找到在基础测试类上定义的类属性?

javascript - 更改输入字段焦点上的输入提交样式

javascript - 向 URL 添加额外变量

javascript - 在剑道网格中显示条件图像

ruby-on-rails - spec/rails_helper.rb 与 spec/spec_helper.rb 有何不同?我需要它吗?

c# - 如何在具有特定权限的用户下运行一个 NUnit 测试