NoMethodError:尝试在SitePrism类中使用时未定义的方法`expect'

时间:2017-02-15 12:08:33

标签: ruby cucumber capybara site-prism

我有一个黄瓜,红宝石,siteprism项目,我们正在使用'rspec'宝石来检查期望。这包含在我们的env.rb中,并在步骤定义中成功使用。

我现在正试图在SitePrism类中进行一些断言,但是我收到了错误。你知道如何使用那些expect()方法吗? 我在.rb文件中尝试使用require 'rspec'include Rspec来定义SitePrism类,但我仍然遇到了同样的错误:

expect(local_value).to eq(@previous_value)
=> Error: NoMethodError: undefined method `expect' for #<xxx_Object @loaded=false>

谢谢!

2 个答案:

答案 0 :(得分:2)

正如您已经发现的那样(根据您的评论),您可以在页面对象类中include RSpec::Matchers获取expect以及RSpec默认匹配器。其中一个匹配器名为all,然后隐藏先前包含在对象中的Capybara :: DSL all方法,并产生您正在看到的错误。解决这个问题的方法是在current_session对象(all)或别名&quot; find_all&#39;上调用page的Capybara版本。所以all(...).map(...)变成了

page.all(...).map(...) # Same as Capybara.current_session.all(...)...

find_all(...).map(...)  # or page.find_all ...

答案 1 :(得分:1)

旧问题,但提供了答案

值得一提的是,按照README说明进行操作。黄瓜将在黄瓜世界中加载RSpec测试功能。

取决于您与谁说话以及在哪里说话;最好(可以说)对黄瓜世界内部的功能执行所有基于RSpec的测试(即在step_definitions中)。

此外,这样做避免了您需要在任何地方包含这些项目,并且您将获得诸如expect(my_page.header_message.text).to eq('This')

之类的干净步骤。

您还可以使用其他任何方法,包括自动创建的capybara方法,这些方法将使用从类上的方法创建的隐式等待或rspec自动包含的方法