Как правильно смоделировать маршруты и контроллеры Rails 3 в тесте плагинов? - PullRequest
2 голосов
/ 12 мая 2011

У меня есть старый плагин 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: неопределенная локальная переменная или метод `_routes 'для TestController: Class

Чего мне не хватает?Мой помощник по тестированию требует:

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'

Идеи?Спасибо!

Ответы [ 2 ]

0 голосов
/ 03 августа 2017

Редактировать: Э-э, извините, это не будет работать на рельсах 3, но, возможно, вы уже обновились?

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

Вы не указали ни одной тестовой среды, поэтомуЯ просто упомяну, что RSpec предоставляет вам routes метод в type: :controller и type: :routing спецификациях, чтобы вы могли сделать что-то вроде

before do
  routes.draw do
    get  ':controller/:action/:id' => 'controller#action' 
  end
end
0 голосов
/ 13 июля 2011

Вам просто нужно нарисовать маршруты на Rails.application

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