2011-02-10 10 views
2

これはRuby on Railsチュートリアルを完了した後の続きです。Rspecエラー:未定義メソッド 'change' for end.should change(Model、:count)

私は、Rspecがどのように「変更」を特定するのに問題があるのか​​、実際にはわからないので、宝石を組み合わせて宝石を組み合わせようと思っていました。

エラー:/spec/requests/athletes_spec.rb:20:inブロック(3段階)「内:未定義のメソッド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 

私はTDDの概念を愛しているけれど、それは私が動作するようにテスト環境を取得しようとしている半分の時間のように思えます。私がどこに間違っているのか誰にでも教えてくれますか?

FURTHER EDIT:

should_not change(Athlete, :count) 

へ:

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 

答えて

1

まず、あなたが提供する必要がありますを使用した例キーワード。 (あなたのルートに応じて)あなたは、コントローラのアクションの代わりにURIを指定する必要があり、要求仕様で、

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

第二に、それはこのようなものをお読みください:インナーdescribeitへの変更

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

+0

私はあなたの郵便物の最初の3行を読んで、手のひらと額は会った。私は仕事からGithubをチェックしましたが、私はすでにこれが答えであることを知っていました。それを指摘してくれてありがとう、Zetetic! –

1

あなたが変更してみてください:

はここに私のGemfileだ

should_not change { Athlete.count } 
+1

Clemenspに感謝しますが、悲しいことにうまくいきませんでした。 –

+0

同じ問題があり、それも私にとってはうまくいきませんでした。 –

関連する問題