Comment puis-je tester cette petite partie du module, avec super? (Superclasse est action_dispatch-3.0.1 test/intégration ...) Le module est inclus dans SPEC/demandes d'intercepter après:RSpec mock ou stub super dans un modèle
module ApiDoc
def post(path, parameters = nil, headers = nil)
super
document_request("post", path, parameters, headers) if ENV['API_DOC'] == "true"
end
...
end
Je ne veux pas exécuter le ActionDispatch :: Intégration- peu importe, mais je ne sais pas how to mock or stub super
pour tester l'unité. Le module est seulement utilisé dans les spécifications, et aura une couverture de test de 100%, ce qui prouve que ces types de métriques sont inutiles. Je dois tester l'unité.
Un exemple, en cas de besoin, voici comment utiliser le module APIDOC
require 'spec_helper'
describe "Products API" do
include ApiDoc ############## <---- This is my module
context "POST product" do
before do
@hash = {:product => {:name => "Test Name 1", :description => "Some data for testing"}}
end
it "can be done with JSON" do
valid_json = @hash.to_json
############### the following 'post' is overriden by ApiDoc
post("/products.json",valid_json,
{"CONTENT_TYPE" => "application/json",
"HTTP_AUTHORIZATION" => ActionController::HttpAuthentication::Basic.encode_credentials("user", "secret")})
response.should be_success
end
end
end
merci! J'utilise moka, donc cela fonctionne: 'ActionDispatch :: Integration :: Session.any_instance.expects (: post) .with xx', mais alors je ne peux pas mocker ApiDoc.post ou -.document_request, comme il est dit c'est la classe (d'ApiDoc) est 'RSpec :: Core :: ExampleGroup :: Nested_1' Comment est-ce que je moque dehors ces méthodes dans ce cas? Ou est-ce que je crée une classe factice pour l'inclure, pour tester ce comportement? – oma
Créer une classe Dummy est la meilleure option que je pense. –
Réponse acceptée en raison de la première ligne de code. Les tests unitaires dans une classe fictive sont une bonne idée. FYI, en utilisant 'super' est préférable au chaînage de méthode d'alias. Ils ont supprimé beaucoup de ces alias lors de la refactorisation des rails 2.x à 3. – oma