Ошибка Rspec: неопределенный метод 'change' для end.should изменить (Model,: count) - PullRequest
2 голосов
/ 10 февраля 2011

Это продолжение после завершения учебника по Ruby on Rails.

Я потратил довольно много времени, пытаясь смешивать и сопоставлять гемы, чтобы найти решение, поскольку я действительно не знаю, как 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

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Во-первых, вам нужно предоставить пример, используя ключевое слово it. Измените внутренний describe на it:

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

Во-вторых, в спецификации запроса вам нужно указать URI вместо действия контроллера, поэтому он должен прочитать что-то вроде этого (в зависимости от ваших маршрутов):

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

1 голос
/ 10 февраля 2011

Вы можете попробовать изменить:

should_not change(Athlete, :count)

на:

should_not change { Athlete.count }
...