我需要对一种方法进行单元测试,该方法可以删除所有特殊字符,
,例如:
和一些空格。
被测方法将文件的每一行存储在单独的数组位置。
如何测试该方法是否删除了文本文件的所有特殊字符?
在您的方法调用之后编写文件并使用正则表达式以确保没有您不想要的特殊字符。或者将文件内容与包含您希望达到的结果的文件进行比较。
fakefs gem很适合这种事情。
在您的规范设置中(通常是 spec_helper.rb):
require 'fakefs/spec_helpers'
RSpec.configure do |config|
config.treat_symbols_as_metadata_keys_with_true_values = true
config.include FakeFS::SpecHelpers, fakefs: true
end
这是正在测试的代码。此功能删除所有标点符号:
require 'tempfile'
def remove_special_characters_from_file(path)
contents = File.open(path, 'r', &:read)
contents = contents.gsub(/\p{Punct}/, '')
File.open(path, 'w') do |file|
file.write contents
end
end
最后,规范:
require 'fileutils'
describe 'remove_special_characters_from_file', :fakefs do
let(:path) {'/tmp/testfile'}
before(:each) do
FileUtils.mkdir_p(File.dirname(path))
File.open(path, 'w') do |file|
file.puts "Just a regular line."
end
remove_special_characters_from_file(path)
end
subject {File.open(path, 'r', &:read)}
it 'should preserve non-puncuation' do
expect(subject).to include 'Just a regular line'
end
it 'should not contain punctuation' do
expect(subject).to_not include '.'
end
end
因为我们用fakefs标记了这个测试的 describe 块,所以没有发生实际的文件系统活动。文件系统是假的,都在内存中。