#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
они не будут запускаться автоматически.