在rails 3布局中测试逻辑的最好方法是什么?
示例:当用户登录我的网站时,如果尚未完成入职流程,则会在所有页面的屏幕顶部显示警报.该逻辑被放置在应用程序布局中.我只是检查一个特定的密钥登录用户.如果钥匙不存在,我会显示警报.一旦钥匙出现(意味着他们已经完成了入门),我不会显示警报.
目前我试图通过视图测试来做到这一点,但是通过包含应用程序布局,我得到了各种各样的ActionView :: Template :: Error:undefined methodauthenticate’for nil:NilClass`错误,我似乎没有测试这个特征.
我需要确保我有这个被测试,因为如果由于某种原因,我的一个开发人员意外地打破了这个功能(查看显示与上载不完整),我们需要立即知道构建.
我试图在我的布局中测试的代码如下所示:
<% if user_signed_in? %> <% unless current_user.has_completed_onboarding? %> <div class="alert"> You cannot accept payments from your clients until you set up your payment gateway. <%= link_to "Set up your",payment_gateway_path %> payment gateway. Its quick,we promise. :) </div> <% end %> <% end %>
解决方法
您可以像任何其他视图一样测试您的布局.只需创建一个文件application.html.erb_spec.rb(如果需要,用haml替换erb)在spec / views / layouts /中,在该文件中按照通常的方式写出你的规范,例如:
require 'spec_helper' describe 'layouts/application' do context 'signed-in user' do before { view.stub(:user_signed_in?) { true } } context 'completed onboarding' do before do user = double('user') user.stub(:has_completed_onboarding?) { false } assign(:current_user,user) end it "should display alert" do render rendered.should have_selector('.alert') end end ... end context 'signed-out user' do ... end ... end
我用我的一个应用程序这样做,它没有任何问题,所以我不明白为什么它不适用于你的情况.