Журнал показывает «перенаправление», но RSpec видит «успех» - PullRequest
1 голос
/ 24 ноября 2011

У меня есть спецификация:

it "should redirect to the log_books_controller#new action when a user logs in who owns zero LogBooks" do    
  visit '/auth/facebook'

  response.should redirect_to new_log_book_path
end

, и это терпит неудачу со следующей ошибкой:

1) LogBooksController should redirect to the log_books_controller#new action when a user logs in who owns zero LogBooks
     Failure/Error: response.should redirect_to new_log_book_path
       Expected response to be a <:redirect>, but was <200>.
     # ./spec/controllers/log_books_controller_spec.rb:7

Но согласно моему log/test.log файлу, на самом деле существует перенаправление. Я что-то здесь упускаю? Я чувствую, что спецификация должна пройти.

log/test.log файл:

Started GET "/auth/facebook/callback" for 127.0.0.1 at Thu Nov 24 10:24:01 -0600 2011
  Processing by SessionsController#create as HTML
  Parameters: {"provider"=>"facebook"}
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."uid" = '1234' AND "users"."provider" = 'facebook' LIMIT 1
   (0.0ms)  SAVEPOINT active_record_1
   (0.1ms)  SELECT 1 FROM "users" WHERE ("users"."uid" = '1234' AND "users"."provider" = 'facebook') LIMIT 1
  SQL (1.3ms)  INSERT INTO "users" ("created_at", "name", "nickname", "provider", "uid", "updated_at") VALUES (?, ?, ?, ?, ?, ?)  [["created_at", Thu, 24 Nov 2011 16:24:01 UTC +00:00], ["name", "Foo Man"], ["nickname", "fooman"], ["provider", "facebook"], ["uid", "1234"], ["updated_at", Thu, 24 Nov 2011 16:24:01 UTC +00:00]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
   (0.1ms)  SELECT COUNT(*) FROM "log_books" WHERE "log_books"."user_id" = 17
Redirected to http://rpglogger.com/log_books/new
Completed 302 Found in 35ms

Я также пытался добавить строку отладчика после строки visit '/auth/facebook', и в этот момент в спецификации response.code возвращает: успех, поэтому я понимаю, почему тест не пройден, но я не знаю, почему для ответа установлено значение :success, когда в журнале четко отображается перенаправление.

1 Ответ

2 голосов
/ 25 ноября 2011

Я предполагаю, что Capybara следует за перенаправлением и выбирает страницу, указанную местоположением в ответе 302, который генерирует код состояния 200.

Вы можете справиться с этим, проверив содержимое страницы.в перенаправленном месте или с использованием спецификации контроллера с тестом в стойке вместо Capybara.

...