如何在黄瓜步骤定义之外使用rspec-expectations

时间:2012-10-22 13:23:33

标签: ruby rspec cucumber watir watir-webdriver

我正在使用watir-cucumber进行测试自动化。我在单独的.rb中编写了以下方法,此方法不在步骤定义中。

 def has_logged_in?
   $browser.text.should include("t788")
 end

当我从步骤定义中调用此方法时,会出现此错误,

 wrong argument type String (expected Module) (TypeError)

相同的代码在步骤定义中正常工作。我四处搜索,发现include方法用于包含模块,但这是ruby-include方法,should include来自rspec\expectations。那么如何像上面那样在步骤定义之外调用should include方法。 我在linux上使用watir-cucumber

2 个答案:

答案 0 :(得分:5)

您需要的include方法位于RSpec::Matchers模块中。

如果您的has_logged_in?方法属于某个类(不属于main),则可以在类中包含RSpec :: Matchers模块。这样您就可以访问include方法。

所以你的课程看起来像是:

class YourClass
    include RSpec::Matchers

    def has_logged_in?
        $browser.text.should include("t788")
    end
end

注意:我之前没有必要这样做,但是从快速检查来看,只要RSpec :: Matchers包含在类而不是主类中,它就能正常工作。在主要包括它似乎没有做任何事情(即包括继续调用标准包括模块方法)。我没有探究是否有任何负面影响。

答案 1 :(得分:0)

在你的宝石文件中:

gem 'rspec', "1.3.2", :require => "spec/expectations"

或者在你的env.rb中为RSpec 1.X.X:

require 'spec/expectations'

或者在你的env.rb中为RSpec 2.X:

require 'rspec/expectations'