typescript Cypress错误“尝试 Package 已 Package 的警告”

cfh9epnr  于 2023-01-14  发布在  TypeScript
关注(0)|答案(2)|浏览(120)
    • 最终目标:**使用Cypress和Typescript测试控制台上的警告和错误。
    • 当前错误消息:**Attempted to wrap warn which is already wrapped
    • 代码:**
describe.only("Unauthenticated User", () => {
    it("No Console Errors for /", () => {
      cy.visit("/", { 
        onBeforeLoad(win) { cy.spy(win.console, 'error').as('onBeforeLoadSpyWinConsoleError') },
        onLoad(win) { cy.spy(win.console, 'error').as('onLoadSpyWinConsoleError') } 
      });
      cy.get('@onBeforeLoadSpyWinConsoleError').should('have.callCount', 0); 
      cy.get('@onLoadSpyWinConsoleError').should('have.callCount', 0); 
    });
    it("No Console Warns for /", () => {
      cy.visit("/", { 
        onBeforeLoad(win) { cy.spy(win.console, 'warn').as('onBeforeLoadSpyWinConsoleWarn') },
        onLoad(win) { cy.spy(win.console, 'warn').as('onLoadSpyWinConsoleWarn') } 
      });
      cy.get('@onBeforeLoadSpyWinConsoleWarn').should('have.callCount', 0); 
      cy.get('@onLoadSpyWinConsoleWarn').should('have.callCount', 0); 
    });
  });

有没有人可以不仅提供解决方案来修复这个错误,而且提供一些建议来删除代码重复?任何文档都有助于更深入地了解这个错误。

g9icjywg

g9icjywg1#

我重构了代码,只提供onBeforeLoad()作为查找控制台错误和警告的方法。

我编写了以下函数:

function checkConsole(page: string, type: keyof Console){
  cy.visit(page, { onBeforeLoad(win) { cy.spy(win.console, type).as(type) }});
  cy.get(`@${type}`).should('have.callCount', 0); 
}

然后像这样通过我的测试

describe("Unauthenticated User", () => {
    it("No Console Errors for /", () => checkConsole("/", "error"));
    it("No Console Warns for /", () => checkConsole("/", "warn"));
  });

这样就足够地破坏了代码,但又不会破坏得太多,以至于其他人无法理解。

nhaq1z21

nhaq1z212#

间谍是“侦听器”,将在整个测试过程中持续存在。

describe.only("Unauthenticated User", () => {
    it("No Console Errors for /", () => {
      cy.visit("/", { 
        onBeforeLoad(win) { cy.spy(win.console, 'error').as('onBeforeLoadSpyWinConsoleError') },
      });
      cy.get('@onBeforeLoadSpyWinConsoleError').should('have.callCount', 0); 
    });
    it("No Console Warns for /", () => {
      cy.visit("/", { 
        onBeforeLoad(win) { cy.spy(win.console, 'warn').as('onBeforeLoadSpyWinConsoleWarn') },
      });
      cy.get('@onBeforeLoadSpyWinConsoleWarn').should('have.callCount', 0); 
    });
  });

相关问题