Rspec 在 lib + 初始值设定项上
Rspec on lib + initializer
我正在尝试测试我创建的库。它使用初始化程序自动加载。
这是我的
# 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|
都为 config
提供了 nil
值。
使用expect error:
expect do
MyLib.configure do |config|
config.salt = nil
config.secret = nil
end
end.to raise_error RuntimeError
但我建议您创建自己的异常 class,例如 MyLib::ConfigurationError
,因为 RuntimeError 可能有其他原因,如果代码中存在错误,测试实际上可能会通过。
我正在尝试测试我创建的库。它使用初始化程序自动加载。
这是我的
# 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|
都为 config
提供了 nil
值。
使用expect error:
expect do
MyLib.configure do |config|
config.salt = nil
config.secret = nil
end
end.to raise_error RuntimeError
但我建议您创建自己的异常 class,例如 MyLib::ConfigurationError
,因为 RuntimeError 可能有其他原因,如果代码中存在错误,测试实际上可能会通过。