J'essaie de simuler un objet qui est passé dans un autre objet, et je n'ai pas de succès. Quelqu'un peut-il me montrer ce que je fais mal?rspec maquette question
class Fetcher
def download
return 3
end
end
class Reports
def initialize(fetcher)
@fetcher = fetcher
end
def status
@fetcher.download
end
end
describe Reports do
before(:each) do
end
it "should get get status of 6" do
Fetcher.should_receive(:download).and_return(6)
f = Reports.new(Fetcher.new)
f.status.should == 6
end
end
La spécification indique encore le statut de retour 3, pas mon DESTINÉ 6.
Certainement je manque quelque chose ici. Des pensées?
Merci, c'était tout. TOUTEFOIS .... deux choses. 1. Pourquoi les instances de Fetcher n'héritent-elles pas des modifications de la classe? Si j'ajoutais une nouvelle méthode à Fetcher, puis l'instanciait, il aurait cette méthode, n'est-ce pas? 2. Je suis arrivé au code ci-dessus à partir d'un screencast Peepcode sur rspec. Le code original était pour un modèle Rails, et ressemblait à ceci: def mock_feed (code postal, how_many = 1) xml = ... Weather.should_receive (: open) .exactement (combien) .times. avec ("http://weather.yahooapis.com/forecastrss?p=#{zipcode}"). and_return (xml) fin Pourquoi sa modification de classe fonctionne-t-elle, et non la mienne? –
Pour le # 1, vous pouvez le faire, mais les problèmes surviennent facilement là où vous n'êtes pas sûr d'avoir la seconde classe instanciée au bon moment. Au lieu de définir de nouvelles méthodes comme vous l'avez décrit, vous pouvez essayer d'utiliser 'instance_eval'. Donc, si vous vouliez ajouter une méthode à Fletcher, vous pouvez faire: Fletcher.class_eval ne def some_method ... fin fin D'autres gars expliquent mieux que je peux. Voici quelques liens: http://bmorearty.wordpress.com/2009/01/09/fun-with-rubys-instance_eval-and-class_eval/ # 2, je ne pouvais pas vraiment faire de problème. Pourriez-vous réessayer? – btelles