我正在使用Cheezy的PageObject设置一些黄瓜测试。我有很多像杰夫摩根的书“黄瓜和奶酪”。
现在我有一个页面对象“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
在Cucumber步骤中,对于其中一个步骤on_page(PublishPage).tag
,然后在另一个步骤中我有on_page(PublishPage).verify_tag
。在我的env.rb文件中,我有require 'rspec-expectations'
。
问题是,当我运行此代码时,出现错误undefined method 'include' for #<PublishPage:xxxxxx>
。但是,如果我将verify_tag方法中的代码移动到步骤中,除了它无法访问@tag之外,一切正常...
答案 0 :(得分:0)
这应该像添加
一样简单include RSpec::Matchers
到你的页面对象。
另一种选择是通过某种方法公开@tag
,然后在你的Cucumber步骤中说出类似
on_page(PublishPage).the_displayed_tag.should include("2")
答案 1 :(得分: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
希望这有帮助!