Ram*_*yag 20 ruby gem rspec ruby-on-rails
我不是Rails或Rspec的新手,但我是制作宝石的新手.当我测试我的控制器时,REST方法"get","post","put","delete"给我一个未定义的方法错误.
您可以在下面找到代码,但如果您希望在贴图中看到它,请单击此处.
谢谢!
这是我的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
Run Code Online (Sandbox Code Playgroud)
我的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
Run Code Online (Sandbox Code Playgroud)
我的订阅控制器:
class SubscriptionsController < ActionController::Base
def index
end
end
Run Code Online (Sandbox Code Playgroud)
错误:
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:
Run Code Online (Sandbox Code Playgroud)
Dam*_*IEU 28
因为这些方法不属于Rspec而属于Rails.
当您描述一个控制器时,它继承自Spec :: Rails :: Example :: ControllerExampleGroup,它继承了 FunctionalExampleGroup,它继承了rails的ActionController :: TestCase.
如果你看一下ActionController :: TestCase的文档,你会发现定义get/post/put/delete方法的地方.
因此,如果您想在Rails之外访问这些方法,则需要重新定义它们.
添加:type => controller描述如下,对我有用
describe TestController, :type => :controller do
# ur stuff
end
Run Code Online (Sandbox Code Playgroud)
上面接受的答案中的链接现在已被破坏.这是更新后的链接(适用于2.3.8) http://api.rubyonrails.org/v2.3.8/classes/ActionController/TestCase.html
| 归档时间: |
|
| 查看次数: |
18040 次 |
| 最近记录: |