Я пытаюсь построить API с Ruby On Rails, следуя этой книге: http://apionrails.icalialabs.com/book/Неверное количество ошибок аргументов в ответ
Однако я столкнулся с проблемой, в главе 5, в то время написания тестов для проверки подлинности.
Я использую Rails Rails 4.0.2 и rspec 3.1.7.
тест-код будет, как показано ниже:
describe "#authenticate_with_token" do
before do
@user = FactoryGirl.create :user
authentication.stub(:current_user).and_return(nil)
response.stub(:response_code).and_return(401)
response.stub(:body).and_return({"errors" => "Not authenticated"}.to_json)
authentication.stub(:response).and_return(response)
end
it "render a json error message" do
expect(json_response[:errors]).to eql "Not authenticated"
end
it { should respond_with 401 }
end
(смотрите листинг 5.11 на http://apionrails.icalialabs.com/book/chapter_five)
И когда я запускаю тест я получаю следующее сообщение об ошибке:
1) Authenticable#authenticate_with_token render a json error message
Failure/Error: response.stub(:response_code).and_return(401)
ArgumentError:
wrong number of arguments (2 for 1)
# ./spec/controllers/concerns/authenticable_spec.rb:28:in `block (3 levels) in <top (required)>'
2) Authenticable#authenticate_with_token
Failure/Error: response.stub(:response_code).and_return(401)
ArgumentError:
wrong number of arguments (2 for 1)
# ./spec/controllers/concerns/authenticable_spec.rb:28:in `block (3 levels) in <top (required)>'
я также попытался написать мой код без использования заглушки, как показано ниже:
allow(authentication).to receive(:current_user).and_return(nil)
allow(response).to receive(:response_code).and_return(401)
allow(response).to receive(:body).and_return({"errors" => "Not authenticated"}.to_json)
allow(authentication).to receive(:response).and_return(response)
Но я все еще получаю неправильное количество аргументов ошибка:
Failures:
1) Authenticable#authenticate_with_token render a json error message
Failure/Error: allow(response).to receive(:response_code).and_return(401)
ArgumentError:
wrong number of arguments (2 for 1)
# ./spec/controllers/concerns/authenticable_spec.rb:33:in `block (3 levels) in <top (required)>'
2) Authenticable#authenticate_with_token
Failure/Error: allow(response).to receive(:response_code).and_return(401)
ArgumentError:
wrong number of arguments (2 for 1)
# ./spec/controllers/concerns/authenticable_spec.rb:33:in `block (3 levels) in <top (required)>'
Это было бы замечательно, если вы можете помочь мне,
спасибо!
Какие версии Rails и RSpec вы используете? –
Вероятно, это проблема с версией rspec, убедитесь, что вы заблокировали версию rspec до 2.14 следующим образом: 'gem" rspec-rails "," ~> 2.14 "' вам, вероятно, придется удалить файл 'Gemfile.lock' а затем запустите команду установки пакета – kurenn
Привет @ dnunez24 Я использую Rails Rails 4.0.2 и rspec 3.1.7. – CanCeylan