问题标签 [cucumberjs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
725 浏览

node.js - 如何防止传递开发依赖被收缩包装

我有一个带有黄瓜列为 devDependency 的 package.json。cucumber 依赖于 cucumber-html。出于某种原因,当我在我的项目上运行 npm-shrinkwrap 时,cucumber-html 包含在 npm-shrinkwrap.json 中。有什么办法可以防止这种情况发生吗?

包.json

npm-shrinkwrap.json

谢谢

0 投票
1 回答
1819 浏览

protractor - 量角器和黄瓜。this.visit 不是函数

我正在尝试使用量角器和黄瓜来为我们的一些 webapps 添加一些功能性 BDD 测试。拼凑与此过程相关的在线信息碎片,我设法拼凑了一个非常基本的测试,但是当我运行测试时protractor conf.js出现以下错误

this.visit 不是函数

我确定这是我做的根本错误的事情,但是有人可以告诉我我的方式的错误吗?

此测试的完整控制台内容如下:

我有以下结构:

conf.js

主页.feature

主页Steps.js

0 投票
1 回答
557 浏览

javascript - 使用 Protractor、Cucumber、Chai 作为 Promised 解决多个 Promise

我需要断言.row一系列 div 的孩子的数量.container大于 0。

标记看起来像:

每个容器中必须至少有一个.row

问题是它总是通过,只要第一个检查为真。

我尝试了使用protractor.promise对象的不同解决方案,还尝试在each迭代中保存承诺,然后尝试在最后实现预期,但没有任何效果。

我已经开始考虑我应该从一个完全不同的角度来采用这种方法。

有接盘侠吗?

0 投票
0 回答
544 浏览

meteor - 验证 Cucumber.js 中是否遵循 url

我在我的 Meteor 项目中使用流星黄瓜流星黄瓜,该项目又使用 cucumber.js。

我希望测试导航到一个 url,但如果它无效,我期待一个错误。在这种情况下,有效的 url 是/articles

这会产生一个通过测试。

当我将 url 更改为无效的内容时(例如:'articlesxxxx',测试仍然通过。这是预期的行为吗?

如果找不到 url,我希望该步骤失败。

相关: 如何在 Rails 中遇到 Cucumber 的负面情况?

0 投票
2 回答
3057 浏览

jenkins - 如何使用量角器在 Cucumberjs 中嵌入屏幕截图?

我尝试使用以下内容codescreenshot其保存在本地。但是,我想将屏幕截图嵌入到cucumber HTML reportJenkins使用json文件生成)。

我应该在此处添加哪些代码embedding应该反映在我的json报告文件中以获取HTML报告中的链接?请建议。

我的代码:

0 投票
2 回答
2329 浏览

cucumber - Cucumber BDD 浏览器测试 - 处理具有相同名称但不同 css 的不同按钮?

我正在尝试用黄瓜进行浏览器测试,并且是第一次学习 BDD 测试——所以我是 BDD 的初学者。我遇到了一个问题,想知道解决它的最佳实践方法。

(我将它用于 node.js webapp,所以它是 cucumber.js 和 selenium WebDriverJS,但平台对于这个问题应该无关紧要)

描述:

在 Gherkin 语法的教程中,您经常会看到单击特定页面上的按钮的示例,例如:

为这一步实现步骤定义非常简单——只需让 selenium 使用任何与按钮匹配的 css-selector 来定位元素,然后让 selenium 点击它。

问题:

但是,如果您在不同的页面上有不同的按钮具有相同的“人类可读”名称(即黄瓜步骤文本中的相同名称),但必须由不同的 css 选择器定位,该怎么办?

似乎您不能拥有特征本地的步骤定义,但所有步骤定义都在所有特征之间共享。这意味着如果您创建一个步骤“我单击提交按钮”,如上所述,步骤定义必须适用于测试整个 webapp 中具有提交按钮的所有页面。我不确定这样做的正确方法是什么。

问题:

处理此问题的最佳做法是什么?


问题示例:

假设我们有 3 个页面,它们都有一个“下一步”按钮,它在每个页面上执行的操作完全不同,并且在 DOM 中的位置也完全不同。假设每个页面都有一个功能。在每个功能中,涉及“下一步”按钮的场景如下所示:

问题在于,在第一页上,“下一个”按钮可能位于“.next-button”,在第二页上可能是“#someContainer .btn.btn-primary”,而在第三页上则是“#assetButtons” li:nth-child(3)”。如果我们对每个特性都有一个本地的步骤定义,它们可以简单地看起来像:

但是由于步骤定义对所有功能都是全局的,并且您自然不能为同一个正则表达式创建两个步骤定义,因此“我单击下一步按钮”的步骤定义需要知道我们在哪个页面或哪个页面场景所指的“下一步”按钮。


我自己的一些想法: 可选阅读

  • 可以使步骤名称不那么通用,并使它们还引用按钮所在的页面:“我单击首页上的下一步按钮”。这样做的问题是我们已经在我们在那个页面上的场景中写了,所以它是多余的。
  • 可以为不同页面上的“下一个”按钮组成不同的名称——例如“首页下一个”和“搜索页面下一个”。
  • 可以使步骤定义检测您当前所在的页面,并根据页面使用不同的 css 选择器。(例如,它可以查询 selenium 以获取当前 URL,并根据步骤中的按钮名称和当前页面查找要使用的 css 选择器)。
  • 可以在步骤文本本身中包含 css 选择器。但这不是人类可读的,而且看起来不像 BDD 方式。
  • 选择更高的抽象级别,在这里你不谈论按钮等,而是更高级别的操作,例如“我转到搜索结果中的下一页”。(总的来说,这似乎不是一个好方法——通常确切的步骤很重要,因为相同的操作通常可以以不同的方式完成,所有这些路径当然应该由测试来执行。例如,如果你可以也可以通过按“N”或滑动进入下一页,这只会测试其中一种情况(但当然也可以将其包含在步骤文本中)。)

但是正确的方法是什么?

0 投票
0 回答
306 浏览

jasmine - 如何依次运行黄瓜和茉莉花测试

我需要(我必须,这不是我的决定,我不能改变它)茉莉花和黄瓜的测试集。所以我创建了两个文件夹,其中包含规范和两个 conf.js 文件,每个框架一个。

当我需要同时运行 jasmine 和 cucumber 测试时,我需要使用一个配置运行量角器,然后使用另一个配置再次运行它。

所以问题是:有没有办法让量角器“一键”运行茉莉花和黄瓜测试(例如,首先运行所有茉莉花测试,然后运行所有黄瓜测试)?

如果您需要有关环境的任何详细信息:我目前正在 IDEA 中运行测试,稍后将有一个 Jenkins(或 Hudson)工作。

PS:我认为,当我们使用 Jenkins 时,这个问题不会那么重要,因为我们可以让两个作业一个接一个地运行。但即使我们可能不需要它,我仍然很好奇它是否可能。

0 投票
0 回答
390 浏览

javascript - 无法在 IntelliJ 中使用 cucumber.js 插件进行调试

我已经根据https://www.jetbrains.com/idea/help/run-debug-configuration-cucumber-js.html设置了 Cucumber.js 插件

它是标题运行/调试。运行部分工程。调试 - 没有。该按钮只是被禁用。那正确吗?

我在 IntelliJ 中看到了这个Cucumber.js 调试,但我想使用原始插件。

0 投票
0 回答
68 浏览

javascript - IntelliJ Cucumber.js 测试报告仅显示一次重用步骤

我正在使用 Cucumber.js 插件在 IntelliJ 中执行我的功能。我注意到了一些问题。

我有一个包含多个场景的功能文件。在此期间会重复使用一些步骤。在测试结果中,我只看到一些步骤一次。

例子:

测试结果将显示以下内容:

请注意,在第二种情况下缺少给定的步骤。

当我在控制台中运行 cucumber.js - 一切都很好。

有什么建议么?

0 投票
2 回答
1188 浏览

cucumber - 如何重用黄瓜功能

我有一个名为“A”的黄瓜功能,位于“C:\cucumber tests”

现在我想创建另一个名为“B”的黄瓜功能。

特征“B”的第一部分步骤将与特征“A”完全相同。我不想简单地将功能“A”中的所有步骤复制到功能“B”

无论如何在功能“B”中调用功能“A”?

我很感激。