ruby-on-rails - 使用 RSpec 在 Rails 引擎中测试代码

标签 ruby-on-rails rspec

我正在尝试做一些看似简单但事实证明相当困难的事情。

我想使用 RSpec 为放在 Rails 引擎的 lib 目录中的类编写测试。

以下是我正在使用的步骤:

rails plugin new mygem -T --mountable --full --dummy-path=spec/dummy

然后我cd mygem; vim mygem.gemspec

我将以下行添加到 mygem.gemspec:

s.add_development_dependency "rspec-rails"

我运行bundle install; Rails 生成 rspec:install

然后我编辑 ~/mygem/lib/mygem/engine.rb 添加以下内容:

module Mygem
  class Engine < ::Rails::Engine
    isolate_namespace Mygem

    config.generators do |g|
      g.test_framework :rspec
    end
  end
end

我在 lib 目录中创建一个非常简单的类,~/mygem/lib/mygem/something.rb

并添加以下内容:

module Mygem
  class Something
    def hi
      "hi"
    end
  end
end

创建测试文件~/mygem/spec/something_spec.rb

然后添加以下内容:

require 'rails_helper'

describe Mygem::Something do
  it 'says hi' do
    s = Mygem::Something.new
    expect(s.hi).to eq('hi')
  end
end

然后,我得到以下输出:

rspec
~/Documents/mygem/spec/rails_helper.rb:3:in `require': cannot load such file -- ~/Documents/mygem/config/environment (LoadError)
  from ~/Documents/mygem/spec/rails_helper.rb:3:in `<top (required)>'
  from ~/Documents/mygem/spec/something_spec.rb:1:in `require'
  from ~/Documents/mygem/spec/something_spec.rb:1:in `<top (required)>'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `load'  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1327:in `block in load_spec_files'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `each'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/configuration.rb:1325:in `load_spec_files'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:102:in `setup'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:88:in `run'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
  from ~/.rvm/gems/ruby-2.2.2/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
  from ~/.rvm/gems/ruby-2.2.2/bin/rspec:23:in `load'
  from ~/.rvm/gems/ruby-2.2.2/bin/rspec:23:in `<main>'
  from ~/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
  from ~/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'

关于我可能做错的事情有什么建议吗?

提前致谢!

最佳答案

看来您的rails_helper 正在寻找要加载的environment.rb 文件,而Rails 引擎中不存在该文件。然而,它确实存在于您的虚拟应用程序中,这就是 RSpec 运行的对象。

尝试将其添加到rails_helper文件的顶部:

require File.expand_path("../dummy/config/environment.rb", __FILE__)

关于ruby-on-rails - 使用 RSpec 在 Rails 引擎中测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082637/

相关文章:

ruby-on-rails - ActiveRecord 中从 Rails 2.3 到 3.2 的日期转换

javascript - 在application.html.erb中添加js脚本

ruby-on-rails - 如何完全重新加载 ActiveRecord 以重置其内存值?

ruby-on-rails - .env 没有被加载到 Rails 的测试环境中,使用 rspec

ruby - 如何使用 rest-client 资源检查响应代码

ruby-on-rails - 如何从 Rspec 输出中禁用 http 日志?

ruby-on-rails - rails : Email a pdf generated with prawn to an email sent by ActionMailer?

ruby-on-rails - 将上传文件的路径存储在数据库中

ruby-on-rails - Rspec 使用测试,Capybara 使用开发数据库

ruby-on-rails - Rails 3 - belongs_to user AND has_many users