2

我尝试用 Rspec 测试我的观点。在我看来,我有一个由 Draper 生成的装饰器。这个装饰器是由正直的_exposure gem 暴露的。

我像这样创建我的 rspec 测试:

require 'spec_helper'

describe "boats/show.html.slim" do

  let(:boat_decorate) { BoatDecorator.new(get_boat) }
  let(:search) { Search.new }

  before do
    view.stub(:boat_decorate) { boat_decorate }
    view.stub(:search) { search }
    render :template => 'boats/show.html.slim'
  end 

  it 'should see titlte' do
    rendered.should have_selector(:h1, :content => boat_decorate.title)
  end                                                                                                                                                                                
end

在我的助手的存根中,我生成了 Draper 装饰器。在这个装饰器中,我有方法可以调用一些 helper link_to

class BoatDecorator < ApplicationDecorator

  decorates :boat

  def region_link
    h.link_to region_name, '#', :title => region_name                                                                                                                                
  end

end

但是如果我启动这个测试我有一个错误:

  1) boats/show.html.slim should see titlte
     Failure/Error: render :template => 'boats/show.html.slim'
     ActionView::Template::Error:
       undefined method `link_to' for nil:NilClass

我不希望我的装饰器对所有助手调用存根。那我该怎么办?

4

2 回答 2

6

我们需要像装饰器规范一样添加设置:ApplicationController.new.set_current_view_context

require 'spec_helper'

describe "boats/show.html.slim" do

  let(:boat_decorate) { BoatDecorator.new(get_boat) }
  let(:search) { Search.new }

  before do
    ApplicationController.new.set_current_view_context
    view.stub(:boat_decorate) { boat_decorate }
    view.stub(:search) { search }
    render :template => 'boats/show.html.slim'
  end 

  it 'should see titlte' do
    rendered.should have_selector(:h1, :content => boat_decorate.title)
  end                                                                                                                                                                                
end
于 2012-03-20T10:04:07.353 回答
0

另一种方法可能是使用 rspec 和 capybara 单独测试装饰器类。 下面是使用这种方法的示例代码。

于 2014-09-07T11:37:48.247 回答