我正在使用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之外,一切正常......
这应该像添加一样简单
include RSpec::Matchers
到页面对象。
另一种选择是通过某种方法公开@tag
,然后在黄瓜步骤中说类似
on_page(PublishPage).the_displayed_tag.should include("2")
每次调用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
希望这有帮助!