首页 文章

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

提问于
浏览
37

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

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

此外,当我运行规范测试时,我得到一个错误,说明与我正在测试的模型相对应的表尚未创建 . 我尝试了 rake engine_name:install:migrations 并从虚拟应用程序中运行 rake db:migrate ,我收到"table already exists"错误 .

一切似乎都断开了,我觉得我在这里遗漏了一些东西,使rspec gem无缝地工作,就像通常使用完整的rails应用程序一样 .

我从这里跟踪了所有的更改http://rubyx.com/2011/03/01/start-your-engines并且我可以通过控制台启动虚拟应用程序来手动测试引擎,如图所示http://railscasts.com/episodes/277-mountable-engines .

有没有办法让rspec成为测试rails 3.1引擎的默认设置?

2 回答

  • 9

    我正在寻找相同的答案,我找到了the combustion gem *,它承诺设置一个完整的环境,以更简单的方式指定你的引擎 . 只需添加

    gem.add_development_dependency 'combustion', '~> 0.3.1'
    

    到您的gemspec并运行

    bundle exec combust
    

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

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

  • 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
    

    对于发电机 . 我将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:clonerake db:migrate RAILS_ENV=test ?我的猜测是RSpec可以设置测试数据库 .

相关问题