使用Rspec测试Rails 3.1可安装引擎

deb*_*deb 37 rspec ruby-on-rails rails-engines rspec-rails ruby-on-rails-3.1

我开始制作Rails 3.1引擎,我很难用rspec测试它.

首先,如果我运行rails g integration_test whatever它会在测试/集成中创建一个常规的集成测试而不是spec/requests(rspec-rails gem被安装并作为gemspec文件中的开发依赖项而需要)

此外,当我运行规范测试时,我得到一个错误,说明与我正在测试的模型相对应的表尚未创建.我尝试rake engine_name:install:migrationsrake 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引擎的默认设置?

dwh*_*ite 62

我正在使用带有Rails引擎的RSpec而没有问题.

我使用以下开关创建了我的插件:-T --full --dummy-path = spec/dummy.

  • -T 不包括测试/单位
  • --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
Run Code Online (Sandbox Code Playgroud)

对于发电机.我将config.generators块添加到我的engine.rb文件中,如下所示:

module MyEngine
  class Engine < Rails::Engine
    config.generators do |g|
      g.test_framework :rspec, :view_specs => false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

有了这个,我可以在运行像模型生成器这样的生成器时获得rspec测试.

至于DB,你的database.yml文件设置正确吗?您是否加载了测试环境,例如rake db:test:clonerake db:migrate RAILS_ENV=test?我的猜测是RSpec无法查看您的表,因为没有设置测试数据库.

  • @dwite您可能希望编辑您的答案,以包含生成的规范需要使用"模块MyEngine ... end"阻止的事实,否则您将收到"未初始化的常量"错误. (3认同)

Fab*_*bio 9

我正在寻找相同的答案,我找到了燃烧宝石*,它承诺以更简单的方式设置一个完整的环境来规范您的发动机.只需添加

gem.add_development_dependency 'combustion', '~> 0.3.1'
Run Code Online (Sandbox Code Playgroud)

到您的gemspec并运行

bundle exec combust
Run Code Online (Sandbox Code Playgroud)

在spec目录中重现完整的rails应用程序.

*我还没试过......