Как/почему интеграционный тест входа пользователя на самом деле допускает успешный фальшивый вход пользователя?

Я довольно новичок в рельсах. Я работаю через railstutorial (Rails 3.0). В какой-то момент мы пишем интеграционный тест для потока входа/выхода пользователя:

describe "success" do
  it "should sign a user in and out" do
    user = Factory(:user)
    visit signin_path
    fill_in :email,    :with => user.email
    fill_in :password, :with => user.password
    click_button
    controller.should be_signed_in
    click_link "Sign out"
    controller.should_not be_signed_in
  end
end

Насколько я понимаю, при тестировании используется база данных db/test. Насколько я могу судить, эта база данных пуста (открыл ее с помощью rails console test). Как мы можем создать поддельного пользователя с помощью Factory, а затем успешно подписать его имя и адрес электронной почты?

RailsTutorial объясняет:

Здесь блок before(:each) входит в систему, посетив страницу входа и отправив действительную пару адрес электронной почты/пароль.

Почему это правильная пара? Я явно что-то упускаю.

Меня это особенно интересует, потому что мне кажется, что вход НЕ работает, и я хотел бы выяснить, почему.


person gmich    schedule 06.04.2012    source источник


Ответы (1)


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

Но когда текущий пример запущен, ваша база данных заполняется записями (одна запись в вашем случае), сделанными FactoryGirl. Какие бы адрес электронной почты и пароль не были сгенерированы на заводе, они будут сохраняться как в базе данных, так и в памяти (переменная user). Вот почему user.password всегда будет правильным.

person Nash Bridges    schedule 06.04.2012