Как мне принудительно вызвать сбой просмотра в rspec?

#ruby-on-rails #views #rspec

#ruby-on-rails #Вид #rspec

Вопрос:

У меня очевидная ошибка в моем приложении Rails 3. Я находился в процессе изменения имени поля с «addr1» на «адрес» (в моей модели «агентства»). Поэтому, естественно, когда я пытаюсь открыть страницу редактирования, я получаю следующую ошибку.

   undefined method `addr1' for #<Agency:0x00000100ebd0b0>
  

примерно в строке 20…

  18:   <div class="field">
 19:     <%= f.label :addr1 %><br />
 20:     <%= f.text_field :addr1 %>
 21:   </div>
  

Легко исправить, но я хочу написать тест rspec, который продемонстрирует ту же ошибку (на случай, если я когда-нибудь повторно введу ее). Я попробовал несколько тестов. Например, в моей спецификации / views / agencies /edit.html.erb_spec.rb, которая у меня в настоящее время есть…

  require 'spec_helper'
 describe "agencies/edit.html.erb" do
   it "renders the complete form" do
     assign(:agency, Factory(:agency, :name => "pat"))
     render # agencies/edit
     rendered.should match(/pat/)
     rendered.should match(/Editing agency/)
     assert_select "form", :action => agencies_path(@agency), :method => "post" do
       assert_select "input#agency_name", :name => "agency[name]"
       assert_select "input#agency_addr1", :name => "agency[name]"
     end
     puts rendered.to_s
   end
 end
  

Но проблема в том, что это проходит! Это НЕ вызывает ту же проблему, которую я получаю через браузер. И я специально оставил материал «addr1» … конечно, его удаление все еще проходит. Я надеялся, что самый первый рендеринг завершится неудачей. Показывает puts…

 <div class="field">
  <label for="agency_addr1">Addr1</label><br />
  <input id="agency_addr1" name="agency[addr1]" size="30" type="text" />
</div>
  

Есть идеи о том, как я могу написать спецификацию, которая показывает мне, что страница действительно отображается правильно?

Спасибо

pat

PS. В процессе изучения этого я понял, что :name => «агентство [name]» ничего не делает в assert_select. Тест проходит независимо от того, что я туда поместил. И это скопировано из сгенерированного кода … есть мысли по этому поводу?

Комментарии:

1. вы изменили addr1 на адрес на заводе-изготовителе и выполняли ли вы миграцию в тестовой среде?

2. Вы выяснили, как принудительно вызвать сбой? Я пытался просто написать ‘fail’, но это не сработало. Слишком хорошо, чтобы быть правдой.

Ответ №1:

Бьюсь об заклад, это связано с миграциями, не запущенными в тестовой базе данных. Если вы запустите

 rake spec
  

миграции выполняются за вас (http://www.ruby-forum.com/topic/170171 ). Если вы запустите

 rspec spec 
  

они не будут запускаться автоматически.