Я играю с Rails уже пару лет и выпустил пару пассивных приложений, которые находятся в производстве. Однако я всегда избегал делать какие-либо тесты, и я решил исправить это. Я пытаюсь написать несколько тестов для приложения, которое я написал для работы, которая уже запущена и работает, но подвергается постоянной ревизии. Я обеспокоен тем, что любые изменения нарушат ситуацию, поэтому я хочу запустить и запустить некоторые тесты. Я прочитал книгу RSpec, посмотрел несколько скринкастов, но изо всех сил стараюсь начать (это поражает меня, как вид, который вы понимаете только после того, как вы это сделали).
Я пытаюсь написать, что должно быть простым тестом моего ReportController. Проблема с моим приложением заключается в том, что в значительной степени все зависит от уровня аутентификации. Ничего не работает, если вы не вошли в систему, поэтому мне нужно смоделировать логин, прежде чем я могу даже отправить простой запрос на получение (хотя, я думаю, я должен написать несколько тестов, чтобы убедиться, что ничего не работает без входа в систему - я доберусь до это позже).
Я установил тестовую среду с RSpec, Capybara, FactoryGirl и Guard (не был уверен, какие инструменты используют так используемые предложения Railscasts). То, как я уже писал о своем тестировании, заключается в том, чтобы создать пользователя в FactoryGirl, например:
FactoryGirl.define do
sequence(:email) {|n| "user#{n}@example.com"}
sequence(:login) {|n| "user#{n}"}
factory :user do
email {FactoryGirl.generate :email}
login {FactoryGirl.generate :login}
password "abc"
admin false
first_name "Bob"
last_name "Bobson"
end
end
а затем напишите мой тест следующим образом:
require 'spec_helper'
describe ReportsController do
describe "GET 'index'" do
it "should be successful" do
user = Factory(:user)
visit login_path
fill_in "login", :with => user.login
fill_in "password", :with => user.password
click_button "Log in"
get 'index'
response.should be_success
end
end
end
Это не так:
1) ReportsController GET 'index' should be successful
Failure/Error: response.should be_success
expected success? to return true, got false
# ./spec/controllers/reports_controller_spec.rb:13:in `block (3 levels) in <top (required)>'
Интересно, если я изменил свой тест на response.should be_redirect
, тестовый проход подскажет мне, что все работает до этой точки, но логин не распознается.
Итак, мой вопрос заключается в том, что мне нужно сделать, чтобы сделать эту работу. Мне нужно создать пользователя в базе данных, которая соответствует учетным данным FactoryGirl? Если да, то в чем смысл FactoryGirl здесь (и должен ли я его использовать)? Как мне создать этот поддельный пользователь в тестовой среде? Моя система аутентификации - очень простая самодельная (основанная на