Частичное представление Rspec2 дает nil: NilClass. Зачем? - PullRequest
0 голосов
/ 14 января 2011

Я пытаюсь начать разработку компонентов представления с Rspec2 и Rails3. Однако я делаю следующее наблюдение и не понимаю, что происходит и как это исправить.

В моей спецификации я определяю:

  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

Когда я бегу:

rspec spec/view/main_spec.rb

Я получаю эту ошибку:

    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 '

Однако, если я только «получаю доступ» к локальному фотообъекту в моей части, все проходит. Это:

в _design.html.erb:

        ---> PASS
        ---> FAIL

На мой взгляд, я называю свое частичное следующим:

main.html.erb

      { :designs => @designs } %> 

Что думает сообщество? Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 15 марта 2011

Эта проблема уже давно решена.

Важно помнить о «соглашении о конфигурации». В этом случае спецификацию можно заставить работать, присваивая ей специальные имена файлов в папке / app и помещая _spec.rb в конце. Таким образом, правильная спецификация для индекса erb в main будет

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