加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:10:36 所属栏目:百科 来源:网络整理
导读:在rails 3布局中测试逻辑的最好方法是什么? 示例:当用户登录我的网站时,如果尚未完成入职流程,则会在所有页面的屏幕顶部显示警报.该逻辑被放置在应用程序布局中.我只是检查一个特定的密钥登录用户.如果钥匙不存在,我会显示警报.一旦钥匙出现(意味着他们已
在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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读