【问题标题】:running code once before cucumber runs its tests在黄瓜运行它的测试之前运行一次代码
【发布时间】:2013-02-26 15:47:56
【问题描述】:

我正在测试我的 rails 应用程序的 facebook 集成。我想使用 Koala 的 API 创建一个测试用户,然后运行我的集成测试。

我写了这个方法(在特性/支持中的 koala.rb 中):

def facebook_user
    test_user ||= Koala::Facebook::TestUsers.new(app_id: ENV['FACEBOOK_APP_ID'], secret: ENV['FACEBOOK_SECRET'])
@facebook_user ||= test_user.create(true, 'email')
end

我希望它只运行一次。现在,每次我在测试中的任何位置调用 facebook_user 方法时,它都会再次运行代码,而不是保留之前检索到的值。

如何运行此代码一次并保留所有场景的值?

谢谢

【问题讨论】:

    标签: ruby-on-rails testing cucumber koala before-filter


    【解决方案1】:

    test_user 是一个局部变量,从不缓存。使用||= 没有任何作用。

    您需要将结果缓存在另一个实例变量@test_user ||= ... 中,或者执行以下操作:

    def facebook_user
      @facebook_user ||= begin
        test_user = Koala::Facebook::TestUsers.new(app_id: ENV['FACEBOOK_APP_ID'], secret: ENV['FACEBOOK_SECRET'])
        test_user.create(true, 'email')
      end
    end
    

    【讨论】:

      【解决方案2】:

      使用全局变量:在支持文件夹中的任何文件上:

      Before do
          if !$dunit
              $facebook_user = Koala::Facebook::TestUsers.new(app_id: ENV['FACEBOOK_APP_ID'], secret: ENV['FACEBOOK_SECRET']).create(true, 'email')
          $dunit = true  
      end
      

      结束

      然后随意调用$facebook_user

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 2017-10-13
        • 1970-01-01
        • 1970-01-01
        • 2019-03-19
        • 1970-01-01
        • 2020-12-19
        相关资源
        最近更新 更多