在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是否有更简单的方法?
答案 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