Rspec2 partial view gives nil:NilClass. Why?

爱⌒轻易说出口 提交于 2019-12-23 05:11:20

问题


I am trying to get going with development of view components with Rspec2 and Rails3. However, I make the following observation, and I don't understand what is going on, and how to fix this.

In my spec I define:

  describe "main/index.html.erb" do
    it "displays a photo url in products partial" do
      assign(:designs, [stub_model(Design, :name => "test", :photo => "photo_url")])

      render
      rendered.should contain("photo_url")
    end
  end

When I run:

rspec spec/view/main_spec.rb

I get this error:

    1) main/index.html.erb displays a photo url in products partial
       Failure/Error: render
       ActionView::Template::Error:
         undefined method `photo' for nil:NilClass
       # ./app/views/main/_design.html.erb:3:in   `_app_views_main__design_html_erb__2937334847274155273_2170841960__1566661024965846011'
       # ./app/views/main/index.html.erb:25:in `_app_views_main_index_html_erb__837234277009287876_2170861440__898201527838028543'
       # ./spec/views/main_spec.rb:7:in `block (2 levels) in '

However, if I only 'access' a local photo object in my partial everything passes. This is:

in _design.html.erb:

        ---> PASS
        ---> FAIL

In my view I call my partial as follows:

main.html.erb

      { :designs => @designs } %> 

What does the community think? Thank you for your help!


回答1:


The problem has been solved some while ago already.

It is important to keep "convention over configuration" in mind. In this case, the spec could be made working by naming the spec files exactly to the filenames in the /app folder and putting a _spec.rb at the end. So, the right spec for the index erb in main would be

/spec/views/main/index.erb_spec.rb


来源:https://stackoverflow.com/questions/4695183/rspec2-partial-view-gives-nilnilclass-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!