ruby-on-rails – 使用RSpec测试布局

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用RSpec测试布局前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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

我用我的一个应用程序这样做,它没有任何问题,所以我不明白为什么它不适用于你的情况.

原文链接:https://www.f2er.com/ruby/266357.html

猜你在找的Ruby相关文章