2011-02-10 2 views
2

Ceci est un suivi après avoir terminé le tutoriel Ruby on Rails.Erreur Rspec: méthode indéfinie 'change' pour end.should change (Model,: count)

J'ai passé pas mal de temps à essayer de mélanger et de faire correspondre des gemmes pour trouver une solution, car je n'ai aucune idée de la difficulté de Rspec à identifier le 'changement'.

Erreur: /spec/requests/athletes_spec.rb:20:in bloc (3 niveaux) dans « : méthode non définie change' for #<Class:0x00000100e715e8> (NoMethodError)

require 'spec_helper' 

describe "Athletes" do 

    before(:each) do 
    @attr = { :gender => "male", 
     :age => 20, 
     :height => 120, 
     :weight => 100, 
     :skill => 2 
    } 
    @user = Factory(:user) 
    end 

    describe "Creating Athletes" do 

    describe "with the correct user should work" do 
     lambda do 
     post :create, :athlete => @attr 
     end.should_not change(Athlete, :count) 

    end 

    end 
end 

J'aime le concept de TDD, mais il semble que la moitié du temps, je suis en train d'obtenir l'environnement de test au travail. Quelqu'un peut-il me dire où je vais mal?

EDIT DE PLUS:

Voici mon Gemfile:

source 'http://rubygems.org' 

gem 'rails', '3.0.4' 
gem 'sqlite3-ruby', '1.3.2', :require => 'sqlite3' 
gem "will_paginate", "3.0.pre2" 
gem 'jquery-rails', '>= 0.2.6' 



group :development do 
    gem 'rspec-rails', '2.5.0' 
    gem 'annotate-models' 
end 

group :test do 
    gem 'factory_girl_rails' 
    gem 'rspec', '2.5.0' 
    gem 'webrat' 
end 

Répondre

1

D'abord, vous devez fournir une exemple en utilisant le it mot-clé. Changer la describe intérieure à it:

describe "Creating Athletes" do 
    it "with the correct user should work" do 

En second lieu, dans une spécification de demande, vous devez spécifier l'URI au lieu de l'action du contrôleur, il devrait donc lire quelque chose comme ça (en fonction de vos itinéraires):

post '/athletes', :athlete => @attr

+0

J'ai lu les 3 premières lignes de votre message et la paume et le front rencontrés. J'ai vérifié Github du travail mais je savais déjà que c'était la réponse. Merci de l'avoir signalé, Zetetic! –

1

Vous pouvez essayer de changer:

should_not change(Athlete, :count) 

à:

should_not change { Athlete.count } 
+1

Merci pour l'aide, Clemensp mais malheureusement, cela n'a pas fonctionné. –

+0

Avoir le même problème et cela n'a pas fonctionné pour moi non plus. –

Questions connexes