Вот моя маленькая проблема, которая заставляет меня чувствовать себя глупо. Я тестирую мое приложение рельсы с RSpec и я также разработать вспомогательный контроллер (захваченный из вики завещать, обратите внимание пользователя параметр по умолчанию):Неверное количество аргументов при вызове метода в разных контекстах RSpec
module ControllerMacros
module ControllerHelpers
def sign_in(user=mock_model(User))
if user.nil?
request.env['warden'].stub(:authenticate!).
and_throw(:warden, {:scope => :user})
controller.stub :current_user => nil
else
# Lots of user.stub here
controller.stub :current_user => user
end
end
end
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
config.include ControllerHelpers, :type => :controller
end
end
Теперь, когда я использую sign_in в одном контексте моего тест контроллера все работает отлично:
context "Authorized access" do
before(:each) do
mocked_user = mock_model(User)
mocked_user.stub(:is?).with(:admin).and_return(true)
sign_in(mocked_user)
# some checks
end
end
Но в другом контексте (в той же спецификации) я получаю «неверного числа аргументов (2 на 1)»:
context "Unauthorized access" do
before(:each) do
sign_in(nil)
end
# test cases
end
И это довольно запутанно для меня, потому что я передаю только один (ноль) аргумент. Я буду рад услышать любые предложения, потому что эти два вызова выглядят одинаково для меня. Может, я что-то упустил.
ОБНОВЛЕНИЕ:
- Рельсы 3.1.0
- рубинового 1.9.3p0 (2011-10-30 редакция 33570)
- RSpec 2.7.1
ОБНОВЛЕНИЕ 2 (пример ошибки):
Failure/Error: sign_in(nil)
ArgumentError:
wrong number of arguments (2 for 1)
# ./spec/support/controller_macros.rb:5:in `sign_in'
# ./spec/controllers/forum/topics_controller_spec.rb:93:in `block (3 levels) in <top (required)>'
Вы используете RSpec 2.8.0? – Bangline
Можете ли вы опубликовать полное сообщение об ошибке, пожалуйста? – d11wtq
Из разработки wiki - «На момент написания ни одной версии gs-версии rspec-mocks не поддерживаются параметры throw, поэтому вам нужно будет использовать репозиторий git (вместе с rspec и rspec-rails 2.8.0. rc1) «. RSpec 2.8.0 был выпущен на днях – Bangline