我需要对一个删除所有特殊字符的方法进行单元测试,例如,
,:
和一些空格。
测试中的方法将文件的每一行存储在一个单独的数组位置。
如何测试方法是否删除了文本文件的所有特殊字符?
答案 0 :(得分:1)
在方法调用后编写文件并使用正则表达式以确保没有您不想要的特殊字符。或者将文件内容与包含您希望实现的结果的文件进行比较。
答案 1 :(得分:0)
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块,所以没有发生实际的文件系统活动。文件系统是假的,都在内存中。