簡體   English   中英

NameError:RSpec上的未初始化常量

[英]NameError: uninitialized constant on RSpec

我的UserTrainingController中有以下內容

  def create
   @user_training_resource = UserTrainingResource::Create.call(user_training_resource_params)
   respond_with(@user_training_resource)
 end

然后在“操作”>“培訓資源”>“創建”中

class UserTrainingResource
 class Create < Operation

   def call(params)
     user_training_resource = UserTrainingResource.new(params)
     ResourceMailer.requested(user_training_resource).deliver_later if user_training_resource.save
     user_training_resource
   end

 end
end

然后在我的測試中

 require 'rails_helper'

 RSpec.describe UserTrainingResource::Create do

  let(:params) { attributes_for(:user_training_resource) }

  describe '#call' do
    it 'saves the request as pending' do
      ut = UserTrainingResource::Create.call(params)
      expect(ut.persisted?).to eq(true)
    end

    it 'queues a mailer' do
      expect(ResourceMailer).to send_mail(:requested)
      UserTrainingResource::Create.call(params)
    end
  end

end

測試給了我

NameError:未初始化的常量UserTrainingResource :: Create

我不知道問題是什么。 它不能正確執行我的操作嗎?

Rails希望在app/models/user_training_resource/create.rb定義app/models/user_training_resource/create.rb ,或者可以將目錄添加到config.autoload_paths

https://blog.bigbinary.com/2015/11/05/how-constant-lookup-happens-in-rails.html

文件結構必須與類的名稱匹配。 將目錄重命名為app/models/user_training_resource/create.rblib/user_training_resource/create.rb

您應該這樣使用module

module UserTrainingResource
  class Create < Operation
    ...
  end
end

還是這樣的簡寫方式:

class UserTrainingResource::Create < Operation
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM