如何用Cypress验证React应用中Chart.js柱状图的柱状数量?
验证Chart.js柱状图的柱子数量(Cypress测试)
你的当前代码存在问题:cy.get("#goodBadBar")获取的是整个柱状图的容器(或Canvas元素),它本身是单个DOM元素,所以have.length, 2的断言必然失败。要验证柱子数量,需要针对Chart.js的实例或其关联数据来做断言,以下是可行方案:
方案1:通过Chart.js实例验证数据(推荐)
Chart.js会将图表实例挂载到对应的Canvas元素上,你可以直接访问实例的data属性来验证柱子数量(柱子数量对应数据集中的数据点个数,或标签的数量):
cy.visit("http://localhost:3000/totals"); cy.get("#goodBadBar canvas") .should("be.visible") .then($canvas => { // 获取Chart.js实例 const chartInstance = $canvas[0].chart; // 验证单个数据集的柱子数量(假设你的柱状图只有一个数据集) expect(chartInstance.data.datasets[0].data.length).to.equal(2); // 或者验证标签数量(标签数通常等于柱子数) // expect(chartInstance.data.labels.length).to.equal(2); });
方案2:针对Canvas图形元素断言(不推荐)
如果必须验证Canvas上绘制的图形,你可以使用Cypress的cy.get(canvas).invoke('getContext', '2d')获取画布上下文,然后检查绘制路径,但这种方法维护性差——Chart.js的渲染细节可能随版本变化,因此优先使用方案1。
内容的提问来源于stack exchange,提问作者joshpopelka20
相关产品推荐
相关产品推荐

