我正在尝试(使用rspec)测试一个方法,该方法将决定给定png文件的颜色。在我的应用程序中,此文件位于/ tmp文件夹中。但是我如何在测试中做到这一点?
def decide_background(background, screenshot_path)
background = background.delete(" ")
self.screenshot = screenshot_path
self.background = background
unless screenshot_path.nil? || screenshot_path.empty?
image = ChunkyPNG::Image.from_file(screenshot_path)
background = ImageManipulation::get_bg_from_edges(image).delete(" ")
unless background.empty?
self.background = background
end
end
if self.background == 'rgba(0,0,0,0)'
self.background = 'rgb(255,255,255)'
end
self.save
end
此方法接收两个参数:
1 - 背景:类型为“rgb(0,0,0)
”的字符串
2 - screenshot_path:存储屏幕截图的路径,位于/tmp/#{name_of_file}
我想确保该方法实际存储正确的背景。所以,我想我需要模拟ImageManipulation::get_bg_from_edges(image).delete(" ")
以避免依赖,因为我没有测试该方法。但是我该怎么做?
另外,我如何通过screenshot_path?我应该在/ tmp文件夹中为此单元测试创建一个文件吗?
答案 0 :(得分:1)
鉴于这是一个单元测试,你应该模拟from_file
。测试ChunkyPNG没有任何好处;我相信它的作者已经为你测试了它。在此方法的示例中:
image = double image # ha, I said "double image"
expect(ChunkyPNG::Image).to receive(:from_file).with(# whatever screenshot path should be) { image }
expect(ImageManipulation).to receive(:get_bg_from_edges).with(image) { # whatever background you like }
你可能也想要一个能够满足这个代码的集成测试(实际上我已经写过了第一个),然后你真的希望磁盘上的图像能够读取。您是否需要将其作为集成测试设置的一部分放在那里,或者您的应用是否应该将其放在那里取决于您的应用。