2015-07-26 4 views
1

Не уверен, что мой синтаксис прав, он, похоже, не распознает заглушку, которую я передал моему двойнику.Rspec double return NoMethodError

class Robot 
    def boogie friend 
    friend.dances 
    end 
end 

Тест:

describe Robot do 

let(:robo_friend){double(:friend, {dances: true})} 

    it "should have a friend dance too" do 
    expect(subject.boogie :robo_friend).to be true 
    end 

end 

И ошибка:

Robot should have a friend dance too 
Failure/Error: expect(subject.boogie :robo_friend).to be true 
NoMethodError: 
    undefined method `dances' for :robo_friend:Symbol 
# ./lib/robot.rb:3:in `boogie' 
# ./spec/robot_spec.rb:8:in `block (2 levels) in <top (required)>' 

Может кто-нибудь увидеть, что я делаю неправильно?

+1

'позволяют (robo_friend) .чтобы получить (: танцы) .and_return (истина)' https://www.relishapp.com/rspec/rspec-mocks/v/3-3/docs/configuring- response/return-a-value – bjhaid

+0

Мне нужно использовать его вне блока 'it', поэтому его можно использовать для нескольких других тестов. Я думаю, пусть это правильный способ сделать это, но не может заставить его работать. – blankanchor

+0

изменить 'ожидать (subject.boogie: robo_friend). Быть истинным' to 'ожидать (subject.boogie robo_friend). Быть истинным' 'robo_friend' вводится в ваш let как метод, поэтому вы не должны использовать символ https://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let – bjhaid

ответ

1

Это будет работать, вам нужно передать объект, а не символ.

describe Robot do 
    let(:robo_friend) { double("Friend", dances: true) } 

    it "should have a friend dance too" do 
    expect(subject.boogie(robo_friend).to eq(true) 
    end 
end 
Смежные вопросы