2

これは、RubyonRailsチュートリアルを完了した後の続きです。

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
4

2 に答える 2

1

変更してみてください:

should_not change(Athlete, :count)

に:

should_not change { Athlete.count }
于 2011-02-10T20:18:27.247 に答える
1

まず、itキーワードを使用して例を提供する必要があります。インナーdescribeit:に変更します

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

次に、リクエスト仕様では、コントローラーアクションの代わりにURIを指定する必要があるため、次のようになります(ルートによって異なります)。

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

于 2011-02-12T22:17:23.553 に答える