Ruby on rails 使用rspec模拟载波波
我需要在不生成上传文件的情况下运行我的规范。 我已经在运行规范之后使用了清理策略,但是我想使用一个模拟来避免在项目中生成文件 我正在使用:Ruby on rails 使用rspec模拟载波波,ruby-on-rails,rspec,carrierwave,Ruby On Rails,Rspec,Carrierwave,我需要在不生成上传文件的情况下运行我的规范。 我已经在运行规范之后使用了清理策略,但是我想使用一个模拟来避免在项目中生成文件 我正在使用: allow_any_instance_of(CarrierWave::Storage::File).to receive(:store!).and_return nil 这段代码确实生成了文件,但在内部创建了一个名为tmp的文件夹:spec/support/uploads 有没有办法不生成这些文件并模拟存储方法?您需要使用双实例: let(:file) {
allow_any_instance_of(CarrierWave::Storage::File).to receive(:store!).and_return nil
这段代码确实生成了文件,但在内部创建了一个名为tmp的文件夹:spec/support/uploads
有没有办法不生成这些文件并模拟存储方法?您需要使用双实例:
let(:file) { instance_double(CarrierWave::Storage::File, store!: nil) }
before do
allow(CarrierWave::Storage::File).to receive(:new) { file }
end
(可能将allow
语句中的CarrierWave::Storage::File
和:new
替换为CarrierWave::Storage::File
的实例;我不熟悉该gem或您的代码,但这是您试图实现的通用语法。)
建议如下:
- (如果要模拟真实文件)
instance\u double(ModelName,method_name1:method_response1,method_name2:method_response2,…)
。如果您正在测试不需要保存/持久化对象(例如,通过数据库查询返回)的行为,您也可以在声明测试对象时尝试使用build
或build_stubbed
而不是create
(例如:)。