Я бы хотел заглушить метод #class для фиктивного объекта:
describe Letter do
before(:each) do
@john = mock("John")
@john.stub!(:id).and_return(5)
@john.stub!(:class).and_return(Person) # is this ok?
@john.stub!(:name).and_return("John F.")
Person.stub!(:find).and_return(@john)
end
it.should "have a valid #to field" do
letter = Letter.create!(:to=>@john, :content => "Hello John")
letter.to_type.should == @john.class.name
letter.to_id.should == @john.id
end
[...]
end
В строке 5 этой программы я заглушаю метод #class, чтобы разрешить такие вещи, как @ john.class.name. Это правильный путь? Будет ли какой-нибудь плохой побочный эффект?
Edit:
Класс Letter выглядит следующим образом:
class Letter < ActiveRecord::Base
belongs_to :to, :polymorphic => true
[...]
end
Интересно, получает ли ActiveRecord имя класса: to в поле с to.class.name
или каким-либо другим способом. Может быть, для этого и используется метод class_name ActiveRecord :: Base?