Rspec, Devise, Factory girl - как войти в Factory user через тест контроллера Rspec? - PullRequest
8 голосов
/ 28 ноября 2011

У меня есть контроллер сообщений, и я только что установил Devise, чтобы быстро и легко добавить аутентификацию. Перед установкой Devise я создал несколько тестов для «нового» действия моего контроллера Posts. После установки Devise мои тесты не выполнялись, пока я не добавил

config.include Devise::TestHelpers, :type => :controller

строка в моем файле spec_helper.rb.

У меня тоже есть строка

before_filter :authenticate_user!, :except => [:show, :index]

в моем PostsController.

Теперь, когда я запускаю свои тесты, они все проходят, кроме этих 2:

it "should be successful" do
     get :new
     response.should be_success
  end

  it "should have the right title" do
     get :new
     response.should have_selector('title', :content => @base_title + " | New post")
  end

Я также использую Factory girl. Ошибка вызвана параметром before_filter, кроме параметра. Мне нужно иметь возможность войти в систему пользователя в rspec с фабричным пользователем. Как зарегистрировать пользователя Factory из теста контроллера Rspec? Как определить фабричного пользователя?

Я пробовал это на своих фабриках.rb:

Factory.define :user do |user|  
  user.name                  "Test User"
  user.email                 "user@example.com"
  user.password              "password"
  user.password_confirmation "password"
end

Но тогда я получаю ошибку:

NoMethodError:
   undefined method `password_salt=' for #<User:0x00000103cac958>

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

7 голосов
/ 29 ноября 2011

Я настоятельно рекомендую удалить тесты вашего контроллера и использовать истории Cucumber - RSpec не так удобен для тестирования пользовательского контента, как Cucumber.

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

Что касается undefined method password_salt=, вы перенесли свою тестовую базу данных?

...