Почему не делают методов RSPEC, “добираются”, “отправьте”, “поместите”, “удалите” работу в спецификации контроллера в драгоценном камне (или вне направляющих)?

Я не плохо знаком с Rails или Rspec, но я плохо знаком с созданием драгоценных камней. Когда я тестирую свои контроллеры, остальные, методы "получают", "отправляют", "помещают", "удаляют", дают мне ошибку неопределенного метода.

Ниже Вы найдете код, но если Вы предпочитаете видеть его в pastie, щелкнуть здесь.

Спасибо!

Вот мой spec_helper:


$LOAD_PATH.unshift(File.dirname(__FILE__))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
require 'rubygems'
require 'active_support' unless defined? ActiveSupport # Need this so that mattr_accessor will work in Subscriber module
require 'active_record/acts/subscribable'
require 'active_record/acts/subscriber'
require 'action_view'
require 'action_controller' # Since we'll be testing subscriptions controller
#require 'action_controller/test_process'
require 'spec'
require 'spec/autorun'


# Need active_support to user mattr_accessor in Subscriber module, and to set the following inflection
ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'dorkus', 'dorkuses'
end                     

require 'active_record' # Since we'll be testing a User model which will be available in the app

# Tell active record to load the subscribable files
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Subscribable)
ActiveRecord::Base.send(:include, ActiveRecord::Acts::Subscriber)


require 'app/models/user' # The user model we expect in the application
require 'app/models/person'
require 'app/models/subscription'
require 'app/models/dorkus'
require 'app/controllers/subscriptions_controller' # The controller we're testing
#... more but I think irrelevant

Мой subscriptions_spec:


require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe SubscriptionsController, "on GET index" do
  load_schema

  describe ", when only subscribable params are passed" do
    it "should list all the subscriptions of the subscribable object"
  end

  describe ", when only subscriber params are passed" do
    it "should list all the subscriptions of the subscriber" do
      u = User.create
      d1 = Dorkus.create
      d2 = Dorkus.create
      d1.subscribe! u
      d2.subscribe! u

      get :index, {:subscriber_type => "User", :subscriber_id => u.id}
      assigns[:subscriptions].should == u.subscriptions
    end
  end
end

Мой контроллер подписок:


class SubscriptionsController < ActionController::Base
  def index
  end
end

Ошибка:


NoMethodError in 'SubscriptionsController on GET index , when only subscriber params are passed should list all the subscriptions of the subscriber'
undefined method `get' for #
/home/ramon/rails/acts_as_subscribable/spec/controllers/subscriptions_controller_spec.rb:21:

20
задан Ramon Tayag 30 March 2010 в 08:48
поделиться

2 ответа

Потому что эти методы принадлежат не Rspec, а Rails.

Когда вы описываете контроллер, он наследует от Spec::Rails::Example::ControllerExampleGroup, который наследует от FunctionalExampleGroup, который наследует от rails'овского ActionController::TestCase.

Если вы посмотрите документацию ActionController::TestCase, то обнаружите, что именно там определены методы get/post/put/delete.

Так что если вы хотите получить доступ к этим методам вне Rails, вам нужно переопределить их.

28
ответ дан 29 November 2019 в 23:44
поделиться

Добавление :type => controller к описанию следующим образом сработало для меня

describe TestController, :type => :controller do
    # ur stuff
end
9
ответ дан 29 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: