代码之家  ›  专栏  ›  技术社区  ›  janosrusiczki

设计视图规格

  •  3
  • janosrusiczki  · 技术社区  · 8 年前

    我习惯于编写视图规范,至少检查以下内容:

    expect(view).to receive(:title).with('Required page title here')
    

    ( title 是我编写的用于设置页面标题的助手方法。)现在,我正试图为我的设计视图编写规范,看起来像:

    - title 'Lost Password'
    .row
      .col-lg-6
        = form_for resource, as: resource_name, url: password_path(resource_name) do |f|
          = render 'layouts/errors', object: resource
          .form-group
            = f.label :email
            = f.text_field :email, class: 'form-control', autofocus: true
          = f.submit 'Send me the instructions', class: 'btn btn-primary'
        %hr
        = render 'devise/shared/links'
      .col-lg-6
        = render 'devise/shared/advantages'
    

    resource resource_name 由设计定义。

    如果在视图上运行以下规范:

    require 'rails_helper'
    describe 'devise/passwords/new', type: :view do
      it 'sets the page title' do
        expect(view).to receive(:title).with('Lost Password')
        render
      end
    end
    

    上面写着: undefined local variable or method 'resource' . 我试过:

    allow(view).to receive(:resource).and_return(User.new)
    

    但后来我 [snip, long class definition] does not implement: resource .

    我该怎么做?我不想把水豚用于像这样琐碎的事情。

    1 回复  |  直到 8 年前
        1
  •  2
  •   mbuechmann    8 年前

    通过在测试助手中编写一个简单的实现,您可以自己提供这些助手:

    def resource_name
      :user
    end
    
    def resource
      @resource ||= User.new
    end
    
    def devise_mapping
      @devise_mapping ||= Devise.mappings[:user]
    end