RSpec не удаляет запись в БД, поэтому он не работает во второй раз - PullRequest
1 голос
/ 07 июня 2011

Это из книги Майкла Хартла, раздел 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 Ответ

5 голосов
/ 07 июня 2011

Как выглядит ваш файл spec / spec_helper.rb? Включены ли у вас транзакции?

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end

Это запускает каждую из ваших спецификаций в транзакции базы данных, возвращая ее в исходное состояние после каждого запуска теста.

Когда ваш помощник по спецификациям будет выглядеть примерно так, запустите:

rake db:test:prepare

И попробуйте еще раз. Если это не сработает, можете ли вы предоставить больше информации? Какая версия RSpec? Какая версия Rails?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...