2011-02-10 16 views
2

這是在完成Ruby on Rails教程後的後續。Rspec錯誤:未定義的方法'改變'end.should改變(型號,:計數)

我花了很長時間試圖混合和匹配寶石找到解決方案,因爲我真的不知道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的概念,但它似乎是一半的時間,我試圖讓測試環境中工作。誰能告訴我我要去哪裏?

進一步編輯:

這裏是我的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 

回答

1

首先,你需要提供一個使用的示例關鍵字。更改內部describeit

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

其次,要求規範,你需要指定的URI,而不是控制器動作的,所以應該讀這樣的事情(取決於你的路由):

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

1

你可以嘗試改變:

should_not change(Athlete, :count) 

到:

should_not change { Athlete.count } 
+1

感謝您的幫助,Clemensp,但可悲的是它沒有奏效。 – 2011-02-12 14:38:05

+0

有同樣的問題,也沒有爲我工作。 – 2013-05-14 15:08:24

相關問題