rails matchers bot ruby-on-rails ruby rspec gem

ruby on rails - matchers - ¿Por qué los métodos de RSpec, "obtener", "publicar", "poner", "eliminar" no funcionan en una especificación de controlador en una gema(o fuera de Rails)?



rspec rails 5 (4)

Agregando: escriba => controlador para describir lo siguiente, funcionó para mí

describe TestController, :type => :controller do # ur stuff end

No soy nuevo en Rails o Rspec, pero soy nuevo en hacer gemas. Cuando pruebo mis controladores, los métodos REST "get", "post", "put", "delete" me dan un error de método no definido.

A continuación encontrará el código, pero si prefiere verlo en una pastelería, haga clic aquí .

¡Gracias!

Aquí está mi 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

Mis suscripciones_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

Mi controlador de suscripciones:

class SubscriptionsController < ActionController::Base def index end end

El error:

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:



Estaba teniendo este problema con una gema que estoy creando para un sistema Rails 2.3.8. Entonces me di cuenta de que estaba usando una versión de Rspec-Rails por encima de 2.0, cuando debería usar la última versión de Rspec-Rails-1.3 (versión 1.3.4).

Desinstalé todas las gemas relacionadas con RSpec-Rails v2 (rspec-core, rspec-expectations, rspec-mocks, etc.), configuré mi Gemfile con v1.3.4 y ejecuté ''bundle install''.

Estoy usando una aplicación dummy Rails 2.3.8 en spec / dummy configurada para usar Bundler, y con un Gemfile configurado con las mismas dependencias de gemas que mis gemas Gemfile (que toma las gemas del archivo gemspec)

Ejecuté ''script / genera rspec'' para generar los archivos / carpetas RSpec para Rails, a los que hice referencia para realizar las configuraciones adecuadas en mis gemas Rakefile y spec_helper file.


Porque estos métodos no pertenecen a Rspec sino a Rails.

Cuando describe un controlador, hereda de Spec::Rails::Example::ControllerExampleGroup , que hereda FunctionalExampleGroup , que hereda ActionController :: TestCase de los rieles.

Si observa la documentación de ActionController :: TestCase , encontrará que es allí donde se definen los métodos de obtención / publicación / colocación / eliminación.

Entonces, si desea obtener acceso a estos métodos fuera de Rails, debe redefinirlos.