Rails 3 с Rspec2 и authlogic: невозможно специфицировать запросы и представления - PullRequest
2 голосов
/ 04 сентября 2010

У меня проблемы с созданием спецификаций для моих просмотров и запросов.Некоторые из моих контроллеров используют named_scope , например:

 #projects_controller.rb
 @projects = Project.with_user( current_user)

 ## project.rb:
 scope :with_user, lambda {|u|  {:joins => :client, :conditions => {:clients => {:user_id => u.id} } }}

, но следующая спецификация выдает ошибку:

Спецификация:

describe "GET /projects" do
    it "works! (now write some real specs)" do
      get projects_path
    end 

Ошибка:

6) Projects GET /projects works! (now write some real specs)
     Failure/Error: get projects_path
     Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
     # ./app/models/project.rb:9:in `block in <class:Project>'
     # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/named_scope.rb:95:in `call'
     # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activerecord-3.0.0.rc/lib/active_record/named_scope.rb:95:in `block in scope'
         # ./app/controllers/projects_controller.rb:4:in `index'

У меня похожая ошибка в спецификациях моего взгляда:

 4) projects/show.haml renders attributes in <p>
     Failure/Error: render
     undefined method `name' for nil:NilClass
     # /home/mping/.rvm/gems/ruby-1.9.2-rc2/gems/activesupport-3.0.0.rc/lib/active_support/whiny_nil.rb:48:in `method_missing'
     # ./app/views/projects/show.haml:4:in `_app_views_projects_show_haml___1706343108022772066_34134280__4548622860215298334'

Мне кажется, что мне нужнозаглушите метод current_user , определенный authlogic, чтобы иметь возможность продвигаться вперед.Как я могу специфицировать взгляды и запросы?Спасибо

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Я только что успешно использовал решение здесь: http://spacevatican.org/2011/12/5/request-specs-and-authlogic

before(:each) do
  activate_authlogic
  @user = FactoryGirl.create(:user)
  UserSession.create @user
  cookies['user_credentials'] = "#{@user.persistence_token}::#@user.send(@user.class.primary_key)}"
end
0 голосов
/ 05 сентября 2010

Stubbing current_user может быть неприятным опытом.Вы можете получить необходимую функциональность сеанса в своих спецификациях, создав пользователя и войдя в систему, как рекомендуется в Документах Authlogic.Например:

include Authlogic::TestCase
activate_authlogic
@user = Factory.create(:user)
UserSession.create(:user)

Выход из системы:

session = UserSession.find
session.destroy if session
...