如何覆盖 Calabash 预定义的步骤?
How to override a Calabash predefined step?
我正在定义自定义葫芦步骤(用于 iOS 和 Android)并希望有选择地覆盖各种预定义步骤。一个例子是:
Given /^I press the "([^\"]*)" button$/ do |text|
tap_when_element_exists("android.widget.Button {text CONTAINS[c] '#{text}'}")
end
我不想使用这个实现,而是想提供我自己的。如果我定义并使用带有匹配正则表达式的步骤,我会收到错误消息:
Ambiguous match of "I press the "big red" button"
它还建议使用“--guess”,但这没有帮助,我仍然收到 Cucumber::Ambiguous
错误。
我可以为我的步骤对正则表达式进行一些任意更改,例如:
I tap the "big red" button
但由于某些原因,这感觉像是一个糟糕的解决方案
- 必须防止使用内置步骤,尤其是因为它可能是最自然的措辞
- 如果 canned_steps 在未来的修订中添加一个冲突的步骤,我将被迫更改我的措辞和我所有的场景
- Android 和 iOS 预定义步骤之间的措辞似乎也有点不同。如果我无法覆盖,这意味着我需要避免在 Android 上使用 iOS 预定义步骤,即使我 不会 得到
Cucumber::Ambiguous
Android. 错误
- 一般来说,我不想告诉场景作者(通常是 QA)不要使用特定的措辞,我宁愿添加替代措辞也不愿删除选项
有没有办法取消定义内置步骤? android canned_step documentation 建议应该有:You can add your own steps or change the ones you see here
我也不想立即丢失所有预定义的步骤(例如:不需要 calabash_steps.rb)。我宁愿只有在它们成为问题时才逐步淘汰它们。
如果可以的话,我不想直接编辑 calabash 代码,因为这需要滚动我自己的 calabash 发行版而不是使用 gem 来安装它。
I'd rather phase them out only when they become a problem. And I don't want to directly edit the calabash code if I can help it, as that would require rolling my own calabash distro instead of using gem to install it.
在您的 features/support/env.rb
中,将 require calabash-android/cucumber
替换为
require 'calabash-android/color_helper'
require 'calabash-android/operations'
World(Calabash::Android::ColorHelper)
World(Calabash::Android::Operations)
然后将 calabash-android 固定步骤复制到项目中的一个文件中 features/step_definitions/canned_steps.rb
。
根据需要删除或替换预定义的步骤。
请注意 - 我们正在开发 Calabash 2.0:iOS 和 Android API 的合并。我们正在谈论从新 calabash
gem 中删除预定义的步骤并将它们作为单独的 gem 分发。例如,看看 rspec 将行为分布为单独的 gem 的方式。目前还没有对此做出决定。
我正在定义自定义葫芦步骤(用于 iOS 和 Android)并希望有选择地覆盖各种预定义步骤。一个例子是:
Given /^I press the "([^\"]*)" button$/ do |text|
tap_when_element_exists("android.widget.Button {text CONTAINS[c] '#{text}'}")
end
我不想使用这个实现,而是想提供我自己的。如果我定义并使用带有匹配正则表达式的步骤,我会收到错误消息:
Ambiguous match of "I press the "big red" button"
它还建议使用“--guess”,但这没有帮助,我仍然收到 Cucumber::Ambiguous
错误。
我可以为我的步骤对正则表达式进行一些任意更改,例如:
I tap the "big red" button
但由于某些原因,这感觉像是一个糟糕的解决方案
- 必须防止使用内置步骤,尤其是因为它可能是最自然的措辞
- 如果 canned_steps 在未来的修订中添加一个冲突的步骤,我将被迫更改我的措辞和我所有的场景
- Android 和 iOS 预定义步骤之间的措辞似乎也有点不同。如果我无法覆盖,这意味着我需要避免在 Android 上使用 iOS 预定义步骤,即使我 不会 得到
Cucumber::Ambiguous
Android. 错误
- Android 和 iOS 预定义步骤之间的措辞似乎也有点不同。如果我无法覆盖,这意味着我需要避免在 Android 上使用 iOS 预定义步骤,即使我 不会 得到
- 一般来说,我不想告诉场景作者(通常是 QA)不要使用特定的措辞,我宁愿添加替代措辞也不愿删除选项
有没有办法取消定义内置步骤? android canned_step documentation 建议应该有:You can add your own steps or change the ones you see here
我也不想立即丢失所有预定义的步骤(例如:不需要 calabash_steps.rb)。我宁愿只有在它们成为问题时才逐步淘汰它们。 如果可以的话,我不想直接编辑 calabash 代码,因为这需要滚动我自己的 calabash 发行版而不是使用 gem 来安装它。
I'd rather phase them out only when they become a problem. And I don't want to directly edit the calabash code if I can help it, as that would require rolling my own calabash distro instead of using gem to install it.
在您的 features/support/env.rb
中,将 require calabash-android/cucumber
替换为
require 'calabash-android/color_helper'
require 'calabash-android/operations'
World(Calabash::Android::ColorHelper)
World(Calabash::Android::Operations)
然后将 calabash-android 固定步骤复制到项目中的一个文件中 features/step_definitions/canned_steps.rb
。
根据需要删除或替换预定义的步骤。
请注意 - 我们正在开发 Calabash 2.0:iOS 和 Android API 的合并。我们正在谈论从新 calabash
gem 中删除预定义的步骤并将它们作为单独的 gem 分发。例如,看看 rspec 将行为分布为单独的 gem 的方式。目前还没有对此做出决定。