ruby - 包括来自黄瓜内部 rspec 的共享示例
问题描述
最终目标是包含在 rails_helper.rb 中的 shared_examples.rb。shared_examples.rb 是该文件的副本
我想在我的黄瓜测试中引用 shared_examples.rb 以便我可以使用该方法it_behaves_like 'two_factor_authenticatable'
我有以下文件夹结构:
更新以包含 @morissetcl 建议的结构
features
step_definitions
sample_step.rb
support
env.rb
sample.feature
spec
models
user_spec.rb
support
shared_examples
shared_example.rb
rails_helper.rb
spec_helper.rb
features 和 spec 文件夹都位于我的 rails 项目的根目录中。
我试图将位于 spec 文件夹中的 rails_helper.rb 包含在 sample_step.rb 文件中。
我尝试在 sample_step.rb 文件中使用不同类型的 require ,如下所示。
需要'spec/spec_helpers/shared_examples'
需要'../../spec/spec_helpers/shared_examples'
require_relative '../../spec/spec_helpers/shared_examples'
我不断收到以下错误
undefined method `it_behaves_like' for main:Object (NoMethodError)
解决方案
it_behaves_like
是 rspec 特定的。它的作用是允许一个规范为特定对象运行另一个规范,因此这在 Cucumber 中不起作用。
您需要做的是拥有一个包含一些杯子和一些规格的测试套件。您在 rspec 中详细介绍了两个因素身份验证,如果您必须始终使用两个因素身份验证来登录您的 cukes,您需要编写一个辅助方法以便您可以做到这一点。
为此,我将执行以下操作
编写一些步骤定义来支持登录,将工作委托给辅助方法。
编写辅助方法
让辅助方法调用其他方法以支持两个因素身份验证
将辅助方法添加到黄瓜的世界对象,以便可以在步骤 def 中调用它们
所以
# features/step_defintions/login
module LoginStepHelper
def login(user: )
login_fill_form_and_submit(user: user)
login_two_factor(user: user)
submit_form
end
def login_fill_form_and_submit(user: )
fill_in :email, user.email
fill_in :password, user.password
end
def login_two_factor(user: )
code = retrieve_2factor_code(user: user)
fill_in :2factor, code
end
...
end
World(LoginStepHeler)
所以现在你必须弄清楚测试如何获得 2factor 代码。完成此操作后,您就有了一个工具,您的步骤定义可用于登录,因此您可以编写如下内容
Given 'I am logged in' do
login user: @i
end
Given 'I login as Fred' do
login user: @fred
end
...
注意:有多少步骤定义可以使用您的辅助方法。
您可以在此处找到有关此方法的更多详细信息https://github.com/diabolo/cuke_up其中包括有关如何创建我们在上述代码中传递给登录函数的测试用户的详细信息
推荐阅读
- applescript - 如何将文本添加到现有剪贴板
- c - 如何修改代码以匹配输出 Linux
- java - 使用 XMLGregorianCalendar 时的 Spring REST 时区问题
- reactjs - 如何在 Laravel 或 ReactJS (WebApplication) 中创建 Webview
- java - Java Jsonb在ISO8601中反序列化UTC日期时间
- python-3.x - 尽管文件存在,但 os.path.exists 在 Windows 上返回 False(MAX_PATH 260 Windows API 问题?)
- rest - 调用 api 作为应用程序启动的一部分?
- ios - Cordova:拨打电话时不会触发混合 iOS 应用程序暂停事件
- sql - 如果某些内容未出现在列表中,如何进行标记
- php - php无限极分类深度如何控制