RSpec / Factory Bot Rails:创建服务类工厂

我正在尝试使用RSpec编写测试。为此,我需要使用factory_bot_rails创建一个工厂。

问题是,我要创建的工厂来自服务,这里:

app/services/scim/scim_provider.rb

module Scim

  class ScimProvider
    attr_reader :identity_provider
    include Rails.application.routes.url_helpers

    def initialize(identity_provider)
      @identity_provider = identity_provider
    end

    ...
  end
end

我尝试了多种方式来创建它,这是我最后的方法:

FactoryBot.define do 

  factory :scim_idp,class: IdentityProvider do 
    name { Faker::Lorem.word }
    config { '{"scim": {"auth_mode": "http_header","bearer_token": "lzifudgvzeliugvzeligvezlrigf"}}' }
    identifier { Faker::Internet.uuid }
    provisioning_type { 'scim' }
    sso_type { 'saml' }
  end

  factory :scim_provider,class: Scim::ScimProvider.new(identity_provider: :scim_idp) do
    config { '{"scim"=>{"auth_mode"=>"http_header","bearer_token"=>"qdfetRx8c6qXFYepNeRvrk1pH6cheb6EcYpBzXmRabY4JsjTbrFDopsXDgSkD1Zkct5LEMptkfyggrcsjrFmGAcRemmffjJMdofQLKuCnw8xUSBSbdaQk7WrRb7JurH4Xdvu3Joi3S6GuRXkiCn8uPHQHwusqX4dp5GaSqXr5vWYwsfe262bhnmnWZ6EebLnEk8DRrybS4ay4XMr5M8n83GjxgF3kk4GighhafeFyABdiD7qm7AUiKt751bCs7hi"}}' }
  end
end

然后在spec/controllers中,我有一个identity_provider_controller_spec.rb

require 'rails_helper'

RSpec.describe IdentityProvidersController,type: :controller do

  before(:all) do
    @scim_idp = create(:scim_idp)
    @scim_provider = create(:scim_provider)
  end

  describe "ScimProvider" do

    it "is created and is associated to an identity_provider" do
      expect(@scim_provider.identity_provider).not_to be_nil
    end

  end

  describe "reset_auth_mode" do

    context "the bearer token changes when reset_auth_mode" do
      it "has an auth_mode and a bearer_token" do
        expect(@scim_provider.auth_mode).not_to be_nil
        expect(@scim_provider.bearer_token).not_to be_nil 
      end

      it "can reset auth mode" do
        # not yet implemented
      end

      it "has a different bearer token when resetting auth mode" do
        # not yet implemented
      end
    end
  end

end

我们运行规范,出现以下错误:

FFFF

Failures:

  1) IdentityProvidersController ScimProvider is created and is associated to an identity_provider
     Failure/Error: @scim_provider = create(:scim_provider)

     NameError:
       wrong constant name #<Scim

我想问题出在工厂。不幸的是,factory_bot_rails文档未提及有关服务类对象创建的任何内容。

leyuruan 回答:RSpec / Factory Bot Rails:创建服务类工厂

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3096552.html

大家都在问