NoMethodError: undefined method `expect' when trying to use it within a SitePrism class
NoMethodError: undefined method `expect' when trying to use it within a SitePrism class
我有一个黄瓜,ruby,我们正在使用 'rspec' gem 来检查预期的 siteprism 项目。这包含在我们的 env.rb 中并在步骤定义中成功使用。
我现在正尝试在 SitePrism class 中做出一些断言,但出现错误。你知道我如何使用那些 expect() 方法吗?
我尝试在定义 SitePrism class 的 .rb 文件中使用 require 'rspec'
加上 include Rspec
,但我仍然遇到同样的错误:
expect(local_value).to eq(@previous_value)
=> Error: NoMethodError: undefined method `expect' for #<xxx_Object @loaded=false>
谢谢!
正如您(从评论中)发现的那样,您可以在页面对象 class 中 include RSpec::Matchers
获得 expect
以及 RSpecs 默认匹配器。其中一个匹配器名为 all
,它会隐藏之前包含在对象中的 Capybara::DSL all
方法,并产生您所看到的错误。解决这个问题的方法是在 current_session 对象 (page
) 或别名 'find_all' 上调用 all
的 Capybara 版本。所以 all(...).map(...)
变成
page.all(...).map(...) # Same as Capybara.current_session.all(...)...
或
find_all(...).map(...) # or page.find_all ...
老问题但提供答案
同样值得指出的是,在遵循 README 说明时。 Cucumber 将 RSpec 测试功能加载到 Cucumber 世界中。
取决于你和谁说话以及在哪里说话;最好(可以说)在 Cucumber World 中(即在 step_definitions 中)执行所有基于 RSpec 的功能测试。
此外,这样做可以避免您需要在任何地方包含这些项目,并且您将获得干净的步骤,例如 expect(my_page.header_message.text).to eq('This')
您也可以使用任何其他方法,包括使用隐式等待的自动创建的水豚方法,或 rspec 从您的 class
上的方法创建的自动包含的方法
我有一个黄瓜,ruby,我们正在使用 'rspec' gem 来检查预期的 siteprism 项目。这包含在我们的 env.rb 中并在步骤定义中成功使用。
我现在正尝试在 SitePrism class 中做出一些断言,但出现错误。你知道我如何使用那些 expect() 方法吗?
我尝试在定义 SitePrism class 的 .rb 文件中使用 require 'rspec'
加上 include Rspec
,但我仍然遇到同样的错误:
expect(local_value).to eq(@previous_value)
=> Error: NoMethodError: undefined method `expect' for #<xxx_Object @loaded=false>
谢谢!
正如您(从评论中)发现的那样,您可以在页面对象 class 中 include RSpec::Matchers
获得 expect
以及 RSpecs 默认匹配器。其中一个匹配器名为 all
,它会隐藏之前包含在对象中的 Capybara::DSL all
方法,并产生您所看到的错误。解决这个问题的方法是在 current_session 对象 (page
) 或别名 'find_all' 上调用 all
的 Capybara 版本。所以 all(...).map(...)
变成
page.all(...).map(...) # Same as Capybara.current_session.all(...)...
或
find_all(...).map(...) # or page.find_all ...
老问题但提供答案
同样值得指出的是,在遵循 README 说明时。 Cucumber 将 RSpec 测试功能加载到 Cucumber 世界中。
取决于你和谁说话以及在哪里说话;最好(可以说)在 Cucumber World 中(即在 step_definitions 中)执行所有基于 RSpec 的功能测试。
此外,这样做可以避免您需要在任何地方包含这些项目,并且您将获得干净的步骤,例如 expect(my_page.header_message.text).to eq('This')
您也可以使用任何其他方法,包括使用隐式等待的自动创建的水豚方法,或 rspec 从您的 class
上的方法创建的自动包含的方法