2015-01-02 2 views
2

Я пытаюсь построить 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)>' 

Это было бы замечательно, если вы можете помочь мне,

спасибо!

+0

Какие версии Rails и RSpec вы используете? –

+0

Вероятно, это проблема с версией rspec, убедитесь, что вы заблокировали версию rspec до 2.14 следующим образом: 'gem" rspec-rails "," ~> 2.14 "' вам, вероятно, придется удалить файл 'Gemfile.lock' а затем запустите команду установки пакета – kurenn

+0

Привет @ dnunez24 Я использую Rails Rails 4.0.2 и rspec 3.1.7. – CanCeylan

ответ

0

Изменения в

allow(response).to receive(:status).and_return(401) it { expect(response.status).to eq(401) }

Смежные вопросы