这个问题不是关于如何在rails应用程序中测试控制器。
开发一个gem我想测试我的gem是否集成在rails控制器中。 因此,在gem根目录中运行rspec是在rails环境之外。
现在我该怎么写一个控制器测试,它可以使用get
或post
等rspec控制器示例组助手?
特别是如果我在一个示例组中设置了元标记:type => :controller
,那么rspec如何设置rails环境以及如何挂钩以便设置路由等等。
我宁愿不必将整个rails应用程序骨架设置为空。但我甚至无法找到有关如何做到这一点的信息。测试集成到rails app或多个框架的gem的最佳实践是什么。
这些来源最接近我所追求的: Test (with RSpec) a controller outside of a Rails environment 但这是针对测试单位的。 http://railsware.com/blog/2012/01/07/testing-gem-integration-with-multiple-ruby-frameworks/ 但这是为了直接挂在rails应用程序类中的水豚。
感谢所有
答案 0 :(得分:1)
以下是来自gem的rails控制器集成测试的一个很好的最小示例。
my_gem
。假设您使用简单的rspec设置(例如rspec --init
)在gem根目录中。然后spec/rails_controller_integration_spec.rb
将会是这样的。
rspec/rails
执行必要的要求,among them rspec/rails/example
根据元标记设置示例组类型。元标记:type => :controller
驱动包含适当的组模块RSpec::Rails::ControllerExampleGroup
,为您提供all the goodies of rails controller specing以及all the goodies of ActionController::TestCase
like get/post
。
希望这有帮助。
我仍然没有得到如何分配Rails环境。特别是如果我想设置两个应用TestTailsApp1
和TestTailsApp2
。有什么建议吗?
require 'spec_helper'
require 'my_gem'
require 'rails'
require 'action_controller/railtie' # allows ActionController::Base
# crucial part here:
require 'rspec/rails'
# note that require 'rspec-rails' does not work
module TestRailsApp
class Application < Rails::Application
# app config here
# config.secret_token = '572c86f5ede338bd8aba8dae0fd3a326aabababc98d1e6ce34b9f5'
# routes.draw do
# resources :models
# end
end
class ApplicationController < ActionController::Base
# setup
end
end
describe 'My gem' do
context "in a Rails controller", :type => :controller do
controller(TestRailsApp::ApplicationController) do
extend(RSpec::Rails::ControllerExampleGroup::BypassRescue)
# example-specific setup for anonymous controller
# https://www.relishapp.com/rspec/rspec-rails/docs/controller-specs/anonymous-controller
def index
end
end
before(:each) do
# request needs to be setup to avoid path setting error
@request = ActionController::TestRequest.new
end
describe "#index" do
it "works" do
get :index
response.body.should == 'index content'
end
end
end
end