javascript - 使用 Cypress 在 SVG 上测试 onclick 事件

标签 javascript testing d3.js ui-testing cypress

我正在使用 Cypress 测试一个 d3 应用程序。在测试中,我想确保在单击 SVG 元素中的圆圈时调用特定函数。当我手动单击时调用该函数,但我编写的测试失败了,所以我假设我在测试的某个地方犯了一个错误。 这是我现在的测试代码:

import * as app from "../../app";

describe("Scatter plot", () => {
  before(() => {
    cy.visit("http://localhost:1234");
  });
  it("Triggers the displayMovieInfo on click", () => {
    const displayMovieInfo = cy.spy(app, "displayMovieInfo");
    cy.get("#scatterPlot")
      .get("circle")
      .eq(0)
      .click({ force: true });

    expect(displayMovieInfo).to.be.called;
  });
});

我从 Cypress 获得的输出:

expected displayMovieInfo to have been called at least once, but it was never called

任何帮助将不胜感激!

更新: 我相信点击可能以前没有用过,因为当柏树试图点击它时圆圈不存在。通过添加“await cy.wait(1000);”在单击操作之前,该函数被调用(我可以看到结果和从其中记录的消息)。可悲的是,测试仍然失败。

更新 2: 我将测试更改为使用窗口对象(见下文),但断言仍然失败(测试本身成功,这也不是一件好事)。

 cy.window()
      .then(window => {
        displayMovieInfoSpy = cy.spy(window, "displayMovieInfo");
        cy.get("#scatterPlot")
          .get("circle")
          .eq(2)
          .click({ force: true })
          .as("clicking");
        expect(displayMovieInfoSpy).to.be.called;
      });

更新 3: 似乎 d3 和 parcel.js 的组合导致测试失败。单独使用 d3 或单独使用 parcel.js 时,测试工作正常。 此外,expect 语句应该在点击操作之后的 then block 中。

最佳答案

您似乎是直接在测试中导入应用程序变量。该对象与您浏览器上的对象不同。您应该制作一个全局变量(或方法)以直接从您的浏览器获取您的应用程序变量

cy.window().its('app').then((app) => { 
   // your test with app var
})

您可能还想使用 then() 条件来确保它在之后进行检查。但这可能不是必需的。

.click({ force: true }).then(() => {
   expect(displayMovieInfo).to.be.called;
});

关于javascript - 使用 Cypress 在 SVG 上测试 onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350097/

相关文章:

javascript - jquery 禁用按钮,直到单击第一个按钮

javascript - 有没有办法在 JavaScript 中定期调用函数?

javascript - 输入范围更新值,同时更改值

vue.js - 视觉 : How do you add E2E tests after not including them in initial webpack template?

python - 在 Django 中对 REST 端点进行单元测试

javascript - 为什么 ng-click 在该指令中仅适用于函数,而不适用于赋值?

ruby-on-rails - Spork + Minitest

javascript - 手动设置平移和缩放后更新 d3 v4 中的缩放状态

javascript - 椭圆弧箭头边d3力布局

javascript - D3 v4 Multi line chart Brush 移动画笔时发出 NaN