我开始制作Rails 3.1引擎,我很难用rspec测试它。
首先,如果我运行rails g integration_test whatever
,它会在测试/集成中创建常规集成测试,而不是规范/请求(安装rspec-rails gem并将其作为gemspec文件中的开发依赖项)< / p>
此外,当我运行规范测试时,我收到一条错误,指出尚未创建与我正在测试的模型相对应的表。我尝试了rake engine_name:install:migrations
并在虚拟应用内部运行rake db:migrate
,并且出现“表已存在”错误。
一切似乎都断开了,我觉得我在这里错过了一些东西,使得rspec gem无缝地工作,就像通常使用完整的rails应用程序一样。
我跟踪了http://rubyx.com/2011/03/01/start-your-engines的所有更改,我可以通过控制台启动虚拟应用程序来手动测试引擎,如http://railscasts.com/episodes/277-mountable-engines所示。
有没有办法让rspec成为测试rails 3.1引擎的默认设置?
答案 0 :(得分:62)
我正在使用带有Rails引擎的RSpec而没有问题。
我使用以下开关创建了我的插件:-T --full --dummy-path = spec / dummy。
-T
不包括test / unit --full
表示该插件是引擎--dummy-path
只是为了让我们没有得到一个测试目录(
默认是test / dummy)。从那里我使用了“启动引擎”文章中的spec_helper:
# Configure Rails Envinronment
ENV["RAILS_ENV"] = "test"
require File.expand_path("../dummy/config/environment.rb", __FILE__)
require 'rspec/rails'
ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
Dir[File.join(ENGINE_RAILS_ROOT, "spec/support/**/*.rb")].each {|f| require f }
RSpec.configure do |config|
config.use_transactional_fixtures = true
end
对于发电机。我将config.generators块添加到我的engine.rb文件中,如下所示:
module MyEngine
class Engine < Rails::Engine
config.generators do |g|
g.test_framework :rspec, :view_specs => false
end
end
end
有了这个,我可以在运行像模型生成器这样的生成器时获得rspec测试。
至于DB,你的database.yml文件设置正确吗?您是否加载了测试环境,例如rake db:test:clone
或rake db:migrate RAILS_ENV=test
?我的猜测是RSpec无法看到你的表,因为没有设置测试数据库。
答案 1 :(得分:9)
我正在寻找相同的答案,我找到了the combustion gem *,它承诺设置一个完整的环境,以便以更简单的方式指定您的引擎。只需添加
gem.add_development_dependency 'combustion', '~> 0.3.1'
到您的gemspec并运行
bundle exec combust
在spec目录中重现完整的rails应用程序。
*我还没试过......