Как использовать mock_model в spec_helper (для использования с Authlogic) - PullRequest
0 голосов
/ 06 июля 2011

Я обновляюсь до rails 3 и rspec 2.

В моем spec_helper выдается ошибка "undefined method` mock_model '".Мой метод current_user устанавливает фиктивного пользователя для authlogic и генерирует эту ошибку.

Мой помощник спецификаций выглядит так

require 'authlogic/test_case'
require 'shoulda'
require 'helpers'

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
Dir[Rails.root.join("spec/factories/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.mock_with :rspec
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
end

module LoginHelper
   include Authlogic::TestCase

   def login_user person
     activate_authlogic
     UserSession.create(...)
   end
end
include LoginHelper


def current_user(stubs = {})
  @current_user ||= mock_model("User", stubs)
end

def user_session(stubs = {}, user_stubs = {})
  @current_user ||= mock_model(UserSession, {:user => current_user(user_stubs)}.merge(stubs))
end

def login(session_stubs = {}, user_stubs = {})
  UserSession.stub!(:find).and_return(user_session(session_stubs, user_stubs))
end

def logout
  @user_session = nil
end

1 Ответ

0 голосов
/ 09 сентября 2011

mock_model определено в RSpec 2 в геме rspec-rails. Если вы добавили rspec-rails в свой Gemfile, он должен автоматически включиться для использования со всеми другими необходимыми гемами RSpec 2.

Следует также отметить, что mock_model не будет работать с UserSession, поскольку он наследуется от Authlogic::Session::Base, а не ActiveModel. Вы можете исправить это, добавив в свою модель UserSession:

class UserSession < Authlogic::Session::Base
  extend ActiveModel::Naming
end
...