测试条件由Rails中的around_action设置

时间:2014-10-27 12:21:51

标签: ruby-on-rails ruby testing rspec minitest

在Rails应用中,当前区域设置在ApplicationController中通过around_action回调设置。这是一个更简洁的解决方案,而不是只使用before_action,这会使请求特定的区域设置处于闲置状态。

class ApplicationController < ActionController::Base
  around_action :with_locale

  def with_locale
    I18n.with_locale(find_current_locale) { yield }
  end
end

由于当前语言环境在请求完成后重置,因此在测试中访问请求特定语言环境并不那么容易。使用before_filter,将通过以下测试:

it 'sets locale from request'
  get :action, locale: locale
  I18n.locale.should == locale
end

我无法想到一种方法来实现此测试以使用around_filter而不向控制器注入一些额外的逻辑。 RSpec是否有更简单的方法?

1 个答案:

答案 0 :(得分:2)

如何使用适当的参数检查是否已调用I18n.with_locale

it 'sets locale from request'
  allow(I18n).to receive(:with_locale)
  get :action, locale: locale
  expect(I18n).to have_received(:with_locale).with(locale)
end