Ce qui suit est l'application/modèles/websites.rbMocha + concombre pour se moquer de la réponse nette
class Masterpiece < ActiveRecord::Base
validates_presence_of :title, :link
validates_uri_existence_of :link, :allow_redirect => false
end
La deuxième validation du plug-in Validates Existence of URI plug-in
Ce qui suit est les caractéristiques/support/fichier mocha.rb
require 'mocha'
World(Mocha::API)
Before do
mocha_setup
@http_mock = mock('Net::HTTPResponse')
@http_mock.stubs(:code => '200', :message => "OK", :content_type => "text/html", :body => '<title>Test</title><body>Body of the page</body>')
Net::HTTP.expects(:get_response).returns(@http_mock)
#Website.expects(:validates_uri_existence_of).returns(true)
end
After do
begin
mocha_verify
ensure
mocha_teardown
end
end
Mais lorsque je tente d'exécuter une fonction de concombre, il va essayer de créer l'enregistrement et avant d'enregistrer le plug-in ci-dessus va essayer de vérifier sur le ne t pour obtenir la réponse. C'est bien.
Mais quand je veux l'obtenir mocké sur l'environnement de test, j'essaye d'employer le moka.
Comment dois-je écrire le code pour simuler la réponse Net ou la méthode de classe validates_uri_existence_of pour exécuter le test en douceur ??
Eh bien, j'ai changé le fichier support/mocha.rb comme vous l'avez suggéré. Avant faire mocha_setup Net :: HTTP.expects (: Get_Response) .Retour (Net :: HTTPSuccess.allocate) fin Mais maintenant, quand je lance la fonction, l'erreur suivante est affichée! pas toutes les attentes ont été satisfaites attentes non satisfaites: - attendus exactement une fois, pas encore: Net :: invoquées HTTP.get_response (any_parameters) (Mocha :: ExpectationError) – Autodidact
Aucune idée pourquoi il n'est pas appelé. Si l'intention est de ne pas toujours être appelé, vous devez utiliser 'stubs' au lieu d'attendre (même travail, n'entraîne pas d'échec quand il n'est pas déclenché). On dirait que le foo de Fakeweb (comme @Radar mentionné) est une solution beaucoup plus agréable. Se moquer à un niveau bas provoque presque toujours des maux de tête. – cwninja
Merci. Je l'ai réglé juste pour l'instant en ajoutant .at_most (4) à la fin du code et cela a fonctionné. Mais je ne suis toujours pas satisfait de cette solution. J'ai regardé le FakeWeb avant de plonger dans Mocha mais je n'ai pas trouvé cette ligne de code pour remplacer celle de Moka. Pouvez-vous me donner cette ligne de code pour faire ce travail en utilisant FakeWeb? – Autodidact