Я пишу картограф, который соответствует атрибутам, полученным из facebook, и устанавливает их в мою модель.Rspec получил неожиданное сообщение: [] с
class Mapper::FacebookUser
def initialize (user, facebook_user)
@user = user
@facebook_user = facebook_user
end
def name
@user.name = @facebook_user['name'] if @facebook_user['name'] rescue false
end
end
Ответ от Facebook является то вроде этого: (JSON)
{
"name": "Jo Doe"
}
И мой user_spec является то, что:
require 'spec_helper.rb'
describe Mapper::FacebookUser do
before(:each) do
@facebook_user = double("FacebookUser")
@user = User.new
end
it 'should map name to name' do
@facebook_user.stub(:name).and_return("User Name")
Mapper::FacebookUser.new(@user, @facebook_user).name
@user.name.should eq("User Name")
end
end
RSpec::Mocks::MockExpectationError: Double "Facebook" received unexpected message :[] with ("name")
Я попытался следующие:
@facebook_user.stub(:name).and_return("User Name")
@facebook_user.stub("name").and_return("User Name")
@facebook_user.stub(:[]).and_return({name: "User Name"})
@facebook_user.stub(:[]).and_return({name: "User Name"}.to_json)
только это работает, но я совершенно уверен, что это не так:
@facebook_user.stub(:[]).and_return("User Name")
Что случилось с моим подходом? Как я могу заставить свой тест работать?
большое спасибо
Я использую RSpec:
- RSpec (2.14.1)
- RSpec-ядро (2.14.7)
- RSpec-ожидания (2.14.4)
- rspec-mocks (2.14.4)
- rspec-rails (2.14.0)
Привет Питер, спасибо за участие в моей проблеме. Я отредактировал мой пост, у меня была ошибка с копией, мне очень жаль. Я никогда не использовал '' '@ facebook_event''', я изменил их на' '' @ facebook_user'''. Надеюсь, теперь все ясно. – Jan
Даже при этом изменении у вас все еще есть проблема, что вы наложили метод 'name', но вы используете метод' [] 'в своем коде, как я указал в своем ответе. –