ruby 在我的rspec中请求一个thor任务会导致未定义的方法

du7egjpx  于 11个月前  发布在  Ruby
关注(0)|答案(3)|浏览(129)

我试图为我的Thor任务编写一个非常基本的rspec,但是当试图请求(或加载)任务时,它失败了,为各种Thor类级别的方法(desc,method_option,class_option等)提供NoMethodError('undefined method ...')

require "spec_helper"
require Rails.root.join('lib/tasks/test_task.thor')

describe 'TestTask' do

  it "is instantiated ok" do
    TestTask.new
  end
end

字符串
正如你所看到的,我正在一个Rails应用程序的环境中进行测试。
thor任务本身可以从命令行正常执行。
我已经看过了Thor的规范,就像其他地方建议的那样(我在哪里可以找到用RSpec测试Thor脚本的好例子?)
有什么想法吗?

6l7fqoea

6l7fqoea1#

我找到的答案是使用load而不是require(我以为我已经测试过了,但也许我错了)
所以:
require 'thor' load File.join(Rails.root.join('lib/tasks/test_task.thor'))

xfyts7mz

xfyts7mz2#

在根目录下创建Thorfile。每次在项目中运行thor命令时都会加载它。

# Thorfile
# load rails environment for all thor tasks (optionally)
ENV['RAILS_ENV'] ||= 'development'
require File.expand_path('config/environment.rb')

Dir["#{__dir__}/lib/tasks/*.thor"].sort.each { |f| load f }

字符串
这将在运行thor任务之前加载所有thor文件。
现在在rails_helper.rb中加载Thorfile:

# spec/rails_helper.rb
require 'thor'
load Rails.root.join('Thorfile')


现在你可以测试你的任务,而不像这样在顶部加载任务:

require "spec_helper"

describe TestTask do
  subject { described_class.new }

  let(:run_task) { subject.invoke(:hello, [], my_option: 42) }

  it "runs" do
    expect { run_task }.not_to raise_error
  end
end

ht4b089n

ht4b089n3#

对我来说,这个问题是通过使用require <file>而不是require_relative解决的。

相关问题