1

我正在使用 Cheezy 的 PageObject 来设置一些黄瓜测试。我的所有设置都非常像 Jeff Morgan 的书“Cucumber & Cheese”。

现在我有一个页面对象“PublishPage”设置,它有一个设置变量@tag 的方法。例如我在文件 publish_page.rb

Class PublishPage
  def tag
  #some steps left out
  @tag = "123"
  end

  def verify_tag
  #some steps left out
  @tag.should include "2"
  end
end

在黄瓜步骤中,我有一个步骤on_page(PublishPage).tag,然后在另一个步骤中我有on_page(PublishPage).verify_tag。在我的 env.rb 文件中,我有require 'rspec-expectations'.

问题是,当我运行此代码时,我收到一条错误消息undefined method 'include' for #<PublishPage:xxxxxx>。但是,如果我将 verify_tag 方法中的代码移动到步骤中,一切正常,除了它无权访问@tag ...

4

2 回答 2

0

这应该像添加一样简单

include RSpec::Matchers

到您的页面对象。

另一种选择是@tag通过某种方法暴露,然后在你的 Cucumber 步骤中说类似

on_page(PublishPage).the_displayed_tag.should include("2")
于 2012-10-25T18:00:21.947 回答
0

每次调用 on_page(PublishPage) 时,它都会实例化一个新的页面对象。您很可能会收到“无法将 nil 转换为字符串”错误,因为您正在从新对象引用实例变量,因此它的值是 nil。如果您在调用 page.tag 和 page.verify_tag 之间仅实例化一次页面对象,则不应再出现该错误。

以这种方式做事将使用页面对象的一个​​实例,允许您在步骤定义之间保持不变。

When /I publish a tag/ do
   #on_page(PublishPage).tag
   @publish_page = PublishPage.new @browser
   @publish_page.tag
end

Then /I should have my tag/ do
   @publish_page.verify_tag 
end

希望这可以帮助!

于 2013-04-12T03:40:58.997 回答