我正在使用赛普拉斯编写集成测试。赛普拉斯将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;
});
});
我想念什么吗?
跟踪控制台中的错误,很明显赛普拉斯没有正确处理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;