Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rspec/Factory Girl/Rails测试注册确认_Ruby On Rails_Testing_Rspec_Devise_Factory Bot - Fatal编程技术网

Ruby on rails 使用Rspec/Factory Girl/Rails测试注册确认

Ruby on rails 使用Rspec/Factory Girl/Rails测试注册确认,ruby-on-rails,testing,rspec,devise,factory-bot,Ruby On Rails,Testing,Rspec,Devise,Factory Bot,试图创建一个Rspec/工厂女孩测试,以确保涵盖Desive对注册的确认-该网站有3种语言(日语、英语、中文),因此我想确保没有任何东西会破坏注册过程 我有以下工厂: user.rb 当然,这取决于您的具体实现,但您的用户类应该生成令牌: require 'secure_random' class User before_create :generate_confirmation_token! def generate_confirmation_token! confirma

试图创建一个Rspec/工厂女孩测试,以确保涵盖Desive对注册的确认-该网站有3种语言(日语、英语、中文),因此我想确保没有任何东西会破坏注册过程

我有以下工厂:
user.rb
当然,这取决于您的具体实现,但您的用户类应该生成令牌:

require 'secure_random'

class User
  before_create :generate_confirmation_token!

  def generate_confirmation_token!
    confirmation_token = SecureRandom.urlsafe_base64
  end
end
创建一个单独的工厂是不必要的,也不会起作用,因为FactoryGirl将尝试创建一个
Signup
的实例,我猜您没有


工厂不是固定装置。

“工厂不是固定装置。”我想这就是我所误解的。您的解决方案非常有效,谢谢您的帮助!是的,您需要将工厂视为应该生成模型类的唯一实例的工厂。不仅仅是一个固定数据的YML装置。
def confirmation_instructions(user, token, opts={})
  @user = user
  set_language_user_only
  mail to: @user.email,
       charset: (@user.language == User::LANGUAGE_JA ? 'ISO-2022-JP' : 'UTF8')
end
describe UserMailer, type: :mailer do

  describe "sending an email" do
    after(:all) { ActionMailer::Base.deliveries.clear }

    context "Japanese user emails" do
      subject(:signup) { create(:signup) }
      subject(:user) { create(:user) }

      subject(:mail) do
        UserMailer.confirmation_instructions(user, token, opts={})
      end

      it "sends an email successfully" do
        expect { mail.deliver }.to change { ActionMailer::Base.deliveries.size }.by(1)
      end
    end
  end
end
subject(:mail) do
  UserMailer.confirmation_instructions(user, token, opts={})
end
subject(:mail) do
  UserMailer.confirmation_instructions(user, signup.token, opts={})
end
Failure/Error: subject(:signup) { create(:signup) }

     NameError:
       uninitialized constant Signup
subject(:mail) do
  UserMailer.confirmation_instructions(user, user.confirmation_token)
end
require 'secure_random'

class User
  before_create :generate_confirmation_token!

  def generate_confirmation_token!
    confirmation_token = SecureRandom.urlsafe_base64
  end
end