【问题标题】:Rspec View Testing for form_forform_for 的 Rspec 查看测试
【发布时间】:2013-12-27 07:06:32
【问题描述】:

我有一个视图文件 _edit.html.erb

 <%= form_for(@search_phrase, remote: true) do |f| %>
   <h4> Keyword </h4>
   <%= f.text_field :keyword %><br/>
   <%= f.submit "Add", class: "btn btn-medium btn-primary" %>
   <%= render 'error' %>
 <% end %>

我正在为它编写视图 rspec 测试/我的测试在 _edit.html.erb_spec.rb 中是这样的

describe "search_phrases/_edit.html.erb" do
  include Devise::TestHelpers
  User.destroy_all

  before :all do
    @user = User.find_by_name('testuser')
    @user ||= begin
    user = User.new(email: "test@gmail.com",
    encrypted_password: "$2a$10$TIJrH0tmQ7VuDeBVBIYhJ......................",
    provider: "facebook", uid: "10000697585", name: "testuser",
    fb_token: "AUExuiUkFoBAEsYdxTfU1ONYanI55Sx5ThBTjo7qnKLiZ")
    user.save!
    user
  end
end

before  :each do
  User.stub(:find_for_facebook_oauth).and_return(@user)
  sign_in @user
end

before :all do
  @search_phrase = SearchPhrase.find_by_user_id(@user.id)
  @search_phrase ||= begin
    search_phrase= SearchPhrase.new(keyword: "testkeyword",user_id: @user.id) #never hard code
    search_phrase.save!
    search_phrase
  end
end

it "creates a form" do
    render
    rendered.should_receive(:form_for).with edit_search_phrase_path(@search_phrase)   
  end
end

但测试失败并出现错误

search_phrases/_edit.html.erb creates a form
     Failure/Error: render
     ActionView::Template::Error:
       undefined local variable or method `search_phrase' for #<#<Class:0x000000073080c0>:0x00000007371b38>
     # ./app/views/search_phrases/_edit.html.erb:1:in `_app_views_search_phrases__edit_html_erb__4315365547541336689_61378180'
     # ./spec/views/search_phrases/_edit.html.erb_spec.rb:45:in `block (2 levels) in <top (required)>'

Finished in 0.30383 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/views/search_phrases/_edit.html.erb_spec.rb:44 # search_phrases/_edit.html.erb creates a form

这里有什么问题,我无法弄清楚。

【问题讨论】:

    标签: ruby-on-rails rspec form-for automated-tests


    【解决方案1】:

    你可能错过了路线

    #in routes.rb
     resources :search_phrases
     ...
    

    【讨论】:

      【解决方案2】:

      您需要添加 assign(:search_phrase, @search_phrase)before :all 块中。即

      before :all do
        @search_phrase = SearchPhrase.find_by_user_id(@user.id)
        @search_phrase ||= begin
         search_phrase= SearchPhrase.new(keyword: "testkeyword",user_id: @user.id) #never hard code
         search_phrase.save!
         search_phrase
        end
        assign(:search_phrase, @search_phrase
      end
      

      https://www.relishapp.com/rspec/rspec-rails/v/3-3/docs/view-specs/view-spec

      【讨论】:

        猜你喜欢
        • 2011-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-20
        • 2021-12-26
        相关资源
        最近更新 更多