rake 规范不使用 rails 环境

Posted

技术标签:

【中文标题】rake 规范不使用 rails 环境【英文标题】:rake spec not using the rails environment 【发布时间】:2010-10-28 13:40:22 【问题描述】:

我正在尝试在我刚刚升级到 rails 2.3.2 的 rails 项目中使用 rspec。我已经在应用程序中安装了 rspec 1.2.6 和 rspec-rails 1.2.6 作为插件。

我的问题是规范无法访问我的应用程序类或任何 rails 标准库。

首先我必须使用来自 RAILS_ROOT 的完整路径来指定我想要测试的模型类,但现在当它加载类时,我得到以下内容

/app/models/person.rb:1: 未初始化的常量 ActiveRecord (NameError) 来自 ./spec/models/person_spec.rb:1:in `require' 来自 ./spec/models/person_spec.rb:1 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb:15:in `load' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb:15:in `load_files' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb:14:in `each' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/example_group_runner.rb:14:in `load_files' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/options.rb:99:in `run_examples' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/lib/spec/runner/command_line.rb:9:in `run' 来自 /Users/law/Projects/roster/vendor/plugins/rspec/bin/spec:4 耙中止!

我通过从应用程序的根目录调用 rake spec 来启动 rspec。

关于在这种情况下可能缺少什么的任何想法?

【问题讨论】:

我发现添加 require 'spec/spec_helper.rb' 似乎可以解决问题,但肯定这是默认包含的内容,而不是每个文件中的内容? 【参考方案1】:

您确实需要在您编写的每个规范文件中包含spec_helper.rb....

您可以通过这种方式运行单个规范:

$ spec specs/models/person_spec.rb

而不是总是运行整个规范套件

【讨论】:

这就是我制定的解决方案。感觉是多余的,所以我想我希望有更好的解决方案。【参考方案2】:

我没有使用规范,所以这可能无法解决您的问题,但如果您正在编写自己的 rake 任务并需要您的 rails 环境,则必须提出要求。

task(:task_name => :environment) do
    # Task Implementation Here
end

【讨论】:

为帮助干杯。我不是在滚动我自己的 rake 任务,而是看了一下,它已经为相关任务运行了一个非常复杂的依赖结构。所以我不确定我想搞砸它。

以上是关于rake 规范不使用 rails 环境的主要内容,如果未能解决你的问题,请参考以下文章

强制 Rake 任务在特定的 Rails 环境中运行

如何在 Rails 中使用环境将参数传递给 Rake 任务? [复制]

rake db rake 任务不工作 Ruby 2.4.0 & Rails 5.0.1

在 Elastic Beanstalk 环境中运行 Rails rake 任务

整理Ruby相关的各种概念(rvm, gem, bundle, rake, rails等)

在rals中将rake任务迁移到Lambda