#ruby-on-rails #rspec
#ruby-on-rails #rspec
Вопрос:
Это из книги Майкла Хартла, раздел 8.4. RSpec тестирует успешную регистрацию, но не удается, потому что адрес электронной почты не уникален. Итак, если я вхожу в код и обновляю адрес электронной почты в спецификации, это работает при первом запуске, но не во второй раз. Я подтвердил это, потому что я могу выполнить тест, изменив адрес электронной почты или иным образом запустив rake db: test: clone.
Любые мысли о том, как преодолеть это, были бы оценены.
Код: требуется ‘spec_helper’
describe "Users" do
describe "signup" do
describe "failure" do
it "should not make a new user" do
lambda do
visit signup_path
fill_in :user_name, :with => "" #you can use CSS id instead of label, which is probably better
fill_in "Email", :with => ""
fill_in "Password", :with => ""
fill_in "Password confirmation", :with => ""
click_button
response.should render_template('users/new')
response.should have_selector("div#error_explanation")
end.should_not change(User, :count)
end
end
describe "success" do
it "should make a new user" do
lambda do
visit signup_path
fill_in "Name", :with => "Example User"
fill_in "Email", :with => "alex@example.com"
fill_in "Password", :with => "foobar"
fill_in "Password confirmation", :with => "foobar"
click_button
response.should have_selector("div.flash.success", :content => "Welcome")
response.should render_template('users/show')
end.should change(User, :count).by(1)
end
end
end
end
Ответ №1:
Как выглядит ваш файл spec / spec_helper.rb? У вас включены транзакции?
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
Это запускает каждую из ваших спецификаций в транзакции базы данных, возвращая ее в исходное состояние после каждого тестового запуска.
Как только ваш помощник по спецификации будет выглядеть примерно так, запустите:
rake db:test:prepare
И попробуйте еще раз. Если это не сработает, можете ли вы предоставить дополнительную информацию? Какая версия RSpec? Какая версия Rails?
Комментарии:
1. Спасибо. Я использую Rails 3.0.1 и RSpec 2.5.1. Я на самом деле только что проверил, и мои тесты везде дают сбой. Я проверил spec_helper.rb, и для этого флага уже установлено значение true: ‘config.use_transactional_fixtures = true’
2. Сбой… Я только что запустил rake db: test: prepare, и теперь все работает гладко. Спасибо!
3. Комментарии @Alex были очень полезны. У меня была такая же ошибка с config.use_transactional_fixtures = true, и то же изменение исправило ее.