【问题标题】:What's the proper way to mock Rails 3 routes and controllers in a plugin test?在插件测试中模拟 Rails 3 路由和控制器的正确方法是什么?
【发布时间】:2011-08-23 16:05:44
【问题描述】:

我有一个旧的 pre-Rails 3 插件,它的测试将不再在 Rails 3 下运行。测试看起来像这样:

class TestController < ActionController::Base
  def test_action; render :nothing => true; end
end

TestController.view_paths = [File.dirname(__FILE__)]

ActionController::Routing::Routes.draw {|m| m.connect ':controller/:action/:id' }

class TestControllerTest < ActionController::TestCase
  context "test_action" do
    should "do something" do
      lambda { post :test_action }.should change { Model.count }
    end
  end
end

运行这个测试让我明白:

未初始化的常量 ActionDispatch::Routing::Routes (NameError)

当我使用 with_routing 时,我认为这是进行测试路由的新方法,如下所示:

should "do something" do
  with_routing do |set|
    set.draw { |m| m.connect ':controller/:action/:id' }
    lambda { post :test_action }.should change { Model.count }
  end
end

我明白了:

NameError: TestController:Class 的未定义局部变量或方法“_routes”

我错过了什么?我的测试助手需要:

require 'rubygems'
require 'active_record'
require 'active_record/version'
require 'active_record/fixtures'
require 'action_controller'
require 'action_dispatch'
require 'action_view'
require 'test/unit'
require 'shoulda'
require 'mocha'

想法?谢谢!

【问题讨论】:

    标签: ruby ruby-on-rails-3 testing routes ruby-on-rails-plugins


    【解决方案1】:

    编辑:呃,抱歉,这不适用于 rails 3,但也许你已经升级了?

    https://relishapp.com/rspec/rspec-rails/v/3-6/docs/controller-specs/engine-routes-for-controllers

    您没有指定任何测试框架,所以我只提一下 RSpec 在 type: :controllertype: :routing 规范中为您提供了 routes 方法,因此您可以执行类似的操作

    before do
      routes.draw do
        get  ':controller/:action/:id' => 'controller#action' 
      end
    end
    

    【讨论】:

      【解决方案2】:

      你只需要在 Rails.application 上绘制路线

      Rails.application.routes.draw do
        # Fun times
      end
      

      【讨论】:

      • 备案:这种方法将重写所有应用程序的路由。所以要小心!
      猜你喜欢
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多