1

我正在使用 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

4

2 回答 2

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 包含在类中而不是主类中,它就可以工作。在 main 中包含它似乎没有做任何事情(即 include 继续调用标准的 include 模块方法)。我没有探索这样做是否有任何负面影响。

于 2012-10-23T13:23:27.593 回答
0

在您的 gem 文件中:

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

或者在 RSpec 1.XX 的 env.rb 中:

require 'spec/expectations'

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

require 'rspec/expectations'
于 2012-10-22T21:42:10.967 回答