2010-09-12 5 views
0

J'ai une spécification:aides Shoulda ne fonctionnent pas

require 'spec_helper' 

# hmm... I need to include it here because if I include it inside describe block `method_missing` exception raises. 
include Shoulda::ActionController::Matchers 

describe CategoriesController do 
    include Devise::TestHelpers 

    render_views 

    context "new should render template :new" do 
    setup do 
     sign_in :user 
     get :new 
    end 

    should render_template(:new) 
    end 
end 

quand je lance rake spec Je vois cela (mais si je change contexte et déplacer setup contenu du bloc à it bloc tout fonctionne très bien):

localhost:gallery rtest$ rake spec 
(in /Users/rtest/Projects/gallery) 
/Users/rtest/.rvm/rubies/ruby-1.9.2-p0/bin/ruby -S bundle exec /Users/rtest/.rvm/rubies/ruby-1.9.2-p0/bin/ruby -Ilib -Ispec "./spec/controllers/categories_controller_spec.rb" "./spec/controllers/photos_controller_spec.rb" "./spec/helpers/categories_helper_spec.rb" "./spec/helpers/photos_helper_spec.rb" "./spec/models/category_spec.rb" 
*** 

Pending: 
    CategoriesHelper add some examples to (or delete) /Users/rtest/Projects/gallery/spec/helpers/categories_helper_spec.rb 
    # Not Yet Implemented 
    # ./spec/helpers/categories_helper_spec.rb:14 
    PhotosHelper add some examples to (or delete) /Users/rtest/Projects/gallery/spec/helpers/photos_helper_spec.rb 
    # Not Yet Implemented 
    # ./spec/helpers/photos_helper_spec.rb:14 
    Category add some examples to (or delete) /Users/rtest/Projects/gallery/spec/models/category_spec.rb 
    # Not Yet Implemented 
    # ./spec/models/category_spec.rb:4 

Finished in 0.0006 seconds 
3 examples, 0 failures, 3 pending 
/Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/shoulda-2.11.3/lib/shoulda/action_controller/matchers/render_template_matcher.rb:41:in `renders_template?': undefined method `assert_template' for #<Class:0x00000104839eb0> (NoMethodError) 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/shoulda-2.11.3/lib/shoulda/action_controller/matchers/render_template_matcher.rb:23:in `matches?' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-expectations-2.0.0.beta.20/lib/rspec/expectations/handler.rb:11:in `handle_matcher' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-expectations-2.0.0.beta.20/lib/rspec/expectations/extensions/kernel.rb:27:in `should' 
     from ./spec/controllers/categories_controller_spec.rb:17:in `block (2 levels) in <main>' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:129:in `module_eval' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:129:in `subclass' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:116:in `describe' 
     from ./spec/controllers/categories_controller_spec.rb:11:in `block in <main>' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:129:in `module_eval' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:129:in `subclass' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/example_group.rb:116:in `describe' 
     from /Users/rtest/.rvm/gems/ruby-1.9.2-p0/gems/rspec-core-2.0.0.beta.20/lib/rspec/core/extensions/object.rb:7:in `describe' 
     from ./spec/controllers/categories_controller_spec.rb:6:in `<main>' 
Loaded suite /Users/rtest/.rvm/gems/ruby-1.9.2-p0/bin/rake 
Started 

Finished in 0.003418 seconds. 

0 tests, 0 assertions, 0 failures, 0 errors, 0 skips 

Test run options: --seed 39993 

Mon spec_helper.rb:

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'shoulda' 
require 'shoulda/rails' 
require 'shoulda/integrations/rspec2' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 


RSpec.configure do |config| 
    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    config.mock_with :rspec 

    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, comment the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 
end 

J'utilise des rails 3. rs pec/Shoulda/factory_girl sont inclus à l'application par ce code dans Gemfile:

group :test, :development do 
    gem 'autotest' 
    gem 'factory_girl' 
    gem "shoulda" 
    gem "rspec-rails", ">= 2.0.0.beta.20" 
end 

Répondre

3

Je suis assez sûr que l'erreur est parce que vous ayiez en't enveloppé votre affirmation de Shoulda l'intérieur d'un bloc it comme ceci:

it { should render_template(:new) } 

Ceci est nécessaire lors de l'utilisation Shoulda avec RSpec.

should render_template(:new) seul fonctionne avec Test :: Unit.

+0

Oui mais j'ai besoin de lancer des helpers dans le bloc' context'. C'est possible? –

+0

Oui, vous pouvez avoir autant d'assertions dans un bloc de contexte que vous le souhaitez. La spécification CategoriesController que vous avez publiée est correcte, il suffit d'insérer 'should render_template (: new)' dans un bloc 'it' et cela devrait fonctionner. – Sidane

0

Si je ne me trompe pas, je l'ai utilisé Shoulda et je pense que la syntaxe est

should_render_template(:new) 

et non

should render_template(:new) 

ce qui explique les tests, 0 0 affirmations ...

+0

cela ne fonctionne pas aussi. J'obtiens une erreur 'méthode indéfinie 'should_render_template' ' –

+1

c'est une syntaxe obsolète au moins de shoulda 2.11.x –

Questions connexes