代码之家  ›  专栏  ›  技术社区  ›  brcebn

lib+初始值设定项上的Rspec

  •  0
  • brcebn  · 技术社区  · 8 年前

    我正在测试我创建的库。它使用初始值设定项自动加载。

    这是我的

    # config/initializer/my_lib.rb
    MyLib.configure do |config|
      config.salt   = Rails.application.secrets.encrypted_salt
      config.secret = Rails.application.secrets.encrypted_secret
    end
    
    # lib/my_lib.rb
    class MyLib
    
      class << self
        attr_accessor :configuration
    
        def config
          @configuration ||= Configuration.new
        end
    
        def configure
          yield(config)
          raise 'Salt not specified' unless config.salt
          raise 'Secret not specified' unless config.secret
        end
      end
    
      class Configuration
        attr_accessor :salt, :secret
      end
    end
    

    我想要的是在没有 salt secret , MyLib.configure RuntimeError .

    我试过下面的测试,但我想我被困在了障碍中

    allow(described_class).to receive(:configure) do |&config|
      config.salt = nil
      config.secret = nil
    end
    

    在上一个示例中 |config| |&config| 给我一个 nil 的值 config .

    1 回复  |  直到 8 年前
        1
  •  0
  •   max Mike Williams    8 年前

    使用 expect error :

    expect do
      MyLib.configure do |config|
        config.salt   = nil
        config.secret = nil
      end
    end.to raise_error RuntimeError 
    

    MyLib::ConfigurationError 因为RuntimeError可能有其他原因,如果代码中有错误,测试实际上可能会通过。