2010-10-01 6 views
1

Je voudrais tester un contrôleur qui restitue directement une sortie JSON (en utilisant "render: json => @entity_names"). Pour cette tâche, j'ai essayé dans mon fichier de spécifications "response.should has_text ('[" enim "," enita "]')". Malheureusement, je reçois toujours cette erreur: Échec/Erreur: response.should have_text ('["enim", "enita"]') méthode non définie `has_text? ' pour #response.should text devrait conduire à la méthode non définie `has_text? '

Est-ce que je manque une gemme qui fournit cette méthode? Voici mon Gemfile:

source 'http://rubygems.org' 

gem 'rails', '>= 3.0.0' 
gem 'mysql2' 
gem 'mongrel' 
gem 'devise' 
gem 'will_paginate', :git => 'git://github.com/mislav/will_paginate.git', :branch => 'rails3' 
gem 'thinking-sphinx', :git  => 'git://github.com/freelancing-god/thinking-sphinx.git', :branch => 'rails3', :require => 'thinking_sphinx' 

group :test, :development do 
    gem 'rspec-rails', '>= 2.0.0.beta.19' 
    gem 'steak', :git => 'git://github.com/cavalle/steak.git' 
    gem 'webrat' 
    gem 'capybara' 
    gem 'capybara-envjs' 
    gem 'shoulda' 
    gem 'launchy' 
    gem 'autotest' 
    gem 'autotest-rails' 
    gem 'test_notifier' 
    gem 'rails3-generators' 
    gem 'factory_girl_rails' 
    gem 'populator' 
    gem 'faker' 
    gem 'random_data' 
    gem 'database_cleaner', :git => 'git://github.com/bmabey/database_cleaner.git' 
    gem 'delorean' 
end 
+2

response.body.should have_text (...) – Eimantas

+0

Ne résout pas le problème. La méthode encore indéfinie 'has_text? '. Je ne peux pas non plus trouver la définition de méthode de "has_text?" n'importe où dans mes gemmes en utilisant grep. Il y a une telle méthode dans le concombre, mais en ajoutant que le Gemfile n'a pas résolu le problème (peut-être parce que je ne fais pas de test d'intégration). – Zardoz

+0

J'allais suggérer d'installer Webrat, mais je vois qu'il est déjà listé ici (j'ai eu un problème similaire avec RSpec et la méthode has_content qui a été résolue avec Webrat). Sur une note séparée, les méthodes has_ ​​* et have_ * sont implémentées avec des fonctions manquantes, donc vous ne les trouverez pas dans la source verbatim. – nocash

Répondre

1

Vous pourriez construire votre résultat attendu que JSON, puis obtenir le corps de la réponse (qui est aussi JSON), décoder à la fois, et de les comparer. Quelque chose comme:

it "should do something" do 
    expected = { :some_key => "and some value" }.to_json 
    xhr :post, :create, { :foo => "bar" } 
    ActiveSupport::JSON.decode(response.body).should == ActiveSupport::JSON.decode(expected) 
end 
+0

Oui, c'est comme ça que je le fais maintenant. – Zardoz

+0

C'est une solution de contournement un peu bâclée. Je ne sais pas quel était le problème ici, mais voici une question avec des réponses plus récentes: http://stackoverflow.com/questions/8688925/capybara-rspec – mtjhax

Questions connexes