3

我有一个 cucumber,ruby,siteprism 项目,我们使用 'rspec' gem 来检查期望值。这包含在我们的 env.rb 中,并在步骤定义中成功使用。

我现在试图在 SitePrism 类中做出一些断言,但我得到了一个错误。你知道我如何使用那些 expect() 方法吗?我在定义 SitePrism 类的 .rb 文件中尝试了require 'rspec'加号,但仍然遇到相同的错误:include Rspec

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

谢谢!

4

2 回答 2

4

正如您所发现的(从您的评论中),您可以include RSpec::Matchers在您的页面对象类中expect与 RSpecs 默认匹配器相处。其中一个匹配器被命名all,然后隐藏先前包含在对象中的 Capybara::DSLall方法,并产生您所看到的错误。解决这个问题的方法是调用allcurrent_session 对象 ( page) 或别名 'find_all' 上的 Capybara 版本。所以all(...).map(...)变成

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

或者

find_all(...).map(...)  # or page.find_all ...
于 2017-02-15T17:01:53.083 回答
1

老问题但提供答案

值得指出的是,在遵循 README 说明时。Cucumber 会将 RSpec 测试功能加载到 Cucumber 世界中。

取决于您与谁交谈以及在哪里交谈;最好(可以说)在 Cucumber World 中执行所有基于 RSpec 的功能测试(即在 step_definitions 中)。

此外,这样做可以避免您需要在任何地方包含这些项目,并且您将获得干净的步骤,例如expect(my_page.header_message.text).to eq('This')

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

于 2019-02-22T14:02:28.793 回答