2010-03-15 4 views
3

Dites que j'ai une classe Metal nommée Preview. Comment puis-je le tester avec RSpec?Test Rails Métal/Rack avec RSpec?

Lorsque je tente:

require 'spec_helper' 

describe Preview do 

    it "should return the posted content" do 
    post "/preview", :content => "*title*" 
    response.body.should == "*title*" 
    end 

end 

je reçois:

undefined method `post' for #<ActiveSupport::TestCase::Subclass_1:0x1058b3098> 

Il semble que RSpec ne charge pas la méthode :post si le test n'est pas explicitement un contrôleur. J'ai essayé de spécifier :type => :controller en vain.

Répondre

6

rspec a des spécifications d'intégration que les tests rails d'enveloppe d'intégration (qui passent par rack). Il suffit de mettre cette spécification dans ./spec/integration/preview_spec.rb.

+0

Bingo. Cette méthode est-elle écrite n'importe où? Merci pour RSpec et tout votre travail David. –

+0

David, cela a-t-il changé pour Rails 3, ou est-ce que je me trompe? J'ai des exceptions interceptées par le middleware via une ActionDispatch :: ShowExceptions réécrite, mais mes tests d'intégration (même quand je les mets dans './Spec/integration /') laissent l'exception inchangée. –

1

je pense qu'il est préférable de tester avec support/test

+0

Cela semble bien, mais je ne veux pas utiliser une autre suite de tests/gem uniquement pour tester une route. Je suis sûr que vous comprenez. –

0

De nos jours (rspec rails 2.2.0 et rails 3) vous pouvez obtenir qu'utiliser Demande Specs:

Selon les readme file:

caractéristiques de demande en direct spec/demandes

[...]

Demande la spécification du comportement de mélange des tests d'intégration de Rails. Voir les documents pour ActionDispatch :: Integration :: Runner pour plus d'informations.

Questions connexes