2011-02-17 49 views
0
# encoding: utf-8 
class UsersController < ApplicationController 

    def index 
    @search = User.search(params[:search]) 
    @users = @search.paginate :per_page => 20, :page => params[:page] 
    end 

end 


<h2>User search</h2> 
<%= form_for @search, :url => users_path, :html => { :method => :get } do |f| %> 
#some form elements 
<% end %> 

<% @users.each do |user| %> 
# show user info 
<% end %> 

現在如何使用rspec 2測試視圖?如何使用rspec測試搜索視圖頁面?

# encoding: utf-8 
require 'spec_helper' 

describe "users/index.html.erb" do 
    before(:each) do 

    ####@user = stub_model(User) 
      ######User.stub!(:search).and_return(@post) 
     How to mock? If not mock(or stubed), it will got a nil error when rspec test. 


    end 

    it "renders a list of users" do 
    render 

    rendered.should contain("User search") 
    end 
end 

回答

0
it "renders a list of users" do 
    assign(:search, stub_model(???)) # see note 
    assign(:users, [stub_model(User)] 
    render 
    rendered.should contain("User search") 
end 

assign允許規範來指代將在普通視圖預期的實例變量。 @users需要是一個數組,因此括號。

注意:用從User.search返回的任何類型的對象替換問號。

編輯

嗯,這是比它出現在乍一看棘手。我找不到一個簡單的方法來模擬一個可以響應必要的消息以使該規範通過的對象。快速和骯髒的方式是隻使用一個真實的對象:

it "renders a list of users" do 
    assign(:search, User.search) 
    assign(:users, [stub_model(User)] 
    render 
    rendered.should contain("User search") 
end 

缺點是,這需要一個數據庫連接工作。我們可以破解我們自己的幫手對象:

class MetaSearchTestHelper 
    extend ActiveModel::Naming 
    include ActiveModel::Conversion 
    attr_accessor :model_name 
    def initialize(options={}) 
    @model_name = options[:model_name] || nil 
    end 
    def singular 
    @model_name ? @model_name.downcase : nil 
    end 
    def persisted? 
    false 
    end 
end 

it "renders a list of users" do 
    assign(:search, MetaSearchTestHelper.new(:model_name=>"User") 
    assign(:users, [stub_model(User)] 
    render 
    rendered.should contain("User search") 
end 

這適用於此規範 - 但它會爲其他人工作嗎?

+0

非常感謝您的回答。 ruby​​-1.9.2-p0> User.search.class MetaSearch :: Searches :: User qichunren 2011-02-17 09:30:16