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

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

此外,当我运行规范测试时,我会收到一个错误,表示与我正在测试的模型对应的表尚未创建.我在虚拟应用程序中try 了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引擎的默认设置?

推荐答案

我正在使用RSpec和Rails引擎,没有问题.

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

  • -T不包括测试/单元
  • --full表示插件是一个引擎
  • --dummy-path只是为了不让我们得到一个测试目录(

在这里,我使用了"启动引擎"文章中的spec_助手:

# 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

发电机.我添加了一个配置.发电机挡住了我的引擎.rb文件如下:

module MyEngine
  class Engine < Rails::Engine
    config.generators do |g|
      g.test_framework :rspec, :view_specs => false
    end
  end
end

有了它,我可以在运行模型生成器这样的生成器时进行rspec测试.

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

Ruby-on-rails相关问答推荐

这种使用on:的语法在 Ruby on Rails 中意味着什么?

Rails - Comment.count没有改变1

Ruby on Rails 7 与 React 集成

Ruby Sinatra Web 服务在 localhost:4567 上运行,但不在 IP 上

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

如何在 YAML 中声明带有单引号和双引号的字符串?

在一行中更改多个对象属性

如何在生产中部署 resque worker?

Phusion 乘客(适合傻瓜!)

Rails 3:验证组合值

格式化日期对象以显示人类可读的日期

Ruby 和 Ruby on Rails 离线 API 文档

你如何undo撤消Bundle 安装 --without

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

如何在每个操作的基础上禁用 Ruby on Rails 的日志(log)记录?

Ruby:如何将一种方法接收到的所有参数和块传递给另一种方法?

Ruby 安装的 RVM 不工作?

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

如何从 ApplicationHelper 调用 ApplicationController 方法