[英]NameError: uninitialized constant Rails::TestTask
I put this code inside my Rakefile in order to be able to run tests from an additional folder "test/classes" (not just from test/models, test/controllers etc):我将此代码放在我的 Rakefile 中,以便能够从附加文件夹“test/classes”(不仅仅是来自 test/models、test/controllers 等)运行测试:
# Adding test/classes directory to rake test.
namespace :test do # line 9
desc "Test tests/classes/* code"
Rails::TestTask.new(parsers: 'test:prepare') do |t| # line 11
t.pattern = 'test/classes/**/*_test.rb'
end
end
Rake::Task['test:run'].enhance ["test:classes"]
This code works perfectly when I run rails test
.当我运行rails test
时,此代码完美运行。
But when I run rails db:migrate
, I get this error:但是当我运行rails db:migrate
,我收到了这个错误:
NameError: uninitialized constant Rails::TestTask
/Users/Developer/project/Rakefile:11:in `block in <top (required)>'
/Users/Developer/project/Rakefile:9:in `<top (required)>'
What do I do to get rid of the error, but still be able to load test files from我该怎么做才能摆脱错误,但仍然能够从
insert 插入
require 'rake/testtask'
into Rakefile 进入Rakefile
I saw this during a Rails 5.2 upgrade (from Rails 4.2). 我在Rails 5.2升级期间(从Rails 4.2)看到了这一点。 The fix for me was to rename Rails::TestTask
to Rake::TestTask
everywhere. 对我来说,修复是将Rails::TestTask
重命名为Rake::TestTask
。
On your tests' setup, you can load your task:在您的测试设置中,您可以加载您的任务:
before { Rails.application.load_tasks }
Then you invoke the task inside your test with:然后你在你的测试中调用任务:
Rake.application.invoke_task "namespace:task_name"
Let's say you want to test the rake task below:假设您要测试下面的 rake 任务:
# lib/tasks/notifications.rake
namespace :notifications do
desc "This task is called by the Heroku scheduler add-on"
task properties_created: :environment do
Account.all.each { |account| AccountMailer.properties_created(account).deliver } if Property.yesterday.any?
end
end
Can be tested with:可以测试:
# test/tasks/notifications_test.rb
require "test_helper"
class NotificationsTest < ActiveSupport::TestCase
include ActionMailer::TestHelper
before { Rails.application.load_tasks }
it "does not send email if no property created yesterday" do
account = create(:account)
create(:property, created_at: 2.days.ago, account: account)
assert_emails(0) { Rake.application.invoke_task "notifications:properties_created" }
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.