修改
事后来看,调用These::Encryption
而不首先实际需要依赖关系是没有任何意义的,所以我得到的关于缺失常量的错误实际上是一个有效的错误。
关于These::Helpers
- 可以选择性地要求 - 我 am 实际上可选地通过在rspec运行开始之前定义它来包含它。
我现在暂时打开这个问题,万一有人有更多的见解。
我的方法看起来像这样:
module My
class Service
extend Forwardable
def_delegators :@helpers, *These::Helpers.delegatable if defined?(These::Helpers)
ENCRYPTED_KEY_PASSWORD = These::Encryption.get('my_password')
end
end
这取决于两个外部类helper
和encryption
。但是,我想在完全隔离的情况下进行测试并将这两个进行测试,因为它们已在其他地方进行了测试。
我怎样才能在班级的背景下做到这一点?
我面临的问题是,当我require
时,类会被加载,这会触发if defined?
和#get
两种方法,但都失败了,因为我还没有有机会将这些课程及其所需的方法排除在外。
我使用的一个解决方案是在require
语句之前简单地定义所需的方法:
require 'spec_helper'
module These
class Helpers
def self.delegatable
[:attribute]
end
end
end
require 'service'
describe My::Service do
...
end
但这很快就会变得难以控制,而且此时我正在做RSpec的工作。
有没有更好的方法来解决这个问题?或者我应该接受在这种情况下,必须加载依赖项才能使测试工作?