2012-10-22 59 views
1

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

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

当我打电话从步骤定义这个错误出现这种方法,

wrong argument type String (expected Module) (TypeError) 

相同的代码工作步骤定义的罚款。我四处搜索,发现include方法用于包含模块,但这是ruby-include方法和should includerspec\expectations下。那么如何在上面的步骤定义之外调用should include方法。 我使用的Watir黄瓜上的Linux

+2

你在哪里和为什么写这个方法? –

+0

你可以做'text.should =〜/ t788 /'就像 – froderik

+0

@IsmaelAbreu我想测试用户是否已经登录,所以不是为每一步我想调用这个函数写它,然后它会决定步骤通过或失败。这是为了避免代码 –

回答

0

在你的宝石文件:

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

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

require 'spec/expectations' 

或者在您的ENV。 RB为RSpec的2.X:

require 'rspec/expectations' 
+0

我做到了这一点需要'rspec/expectations' 在我的代码 –

4

所需的include方法是在RSpec::Matchers模块。

如果您的has_logged_in?方法位于类中(不是主要部分),您可以在类中包含RSpec :: Matchers模块。这将使您可以访问include方法。

,以便类会是什么样子:

class YourClass 
    include RSpec::Matchers 

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

注:我还没有收到要做到这一点,但是从一个快速检查,但它作为RSpec的::匹配器包含在长工作而不是主要的。包括它在主体中并没有出现任何事情(即包括继续调用标准的包含模块方法)。我没有探讨是否有这样做的负面影响。

+0

它不起作用 –

+0

@UdaySwami它是你以前看到的例外吗?你能分享你的整个.rb文件吗? –