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

上的方法创建的自动包含的方法