,
などのすべての特殊文字:
と空白スペースをすべて削除するメソッドを単体テストする必要があります。
テスト対象のメソッドは、ファイルの各行を個別の配列位置に格納します。
メソッドがテキスト ファイルのすべての特殊文字を削除したかどうかをテストするにはどうすればよいですか?
メソッド呼び出しの後にファイルを書き込み、正規表現を使用して、不要な特殊文字がないことを確認します。または、ファイルの内容を、達成したい結果を含むファイルと比較します。
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のタグを付けたため、実際のファイル システム アクティビティは発生しませんでした。ファイルシステムは偽物で、すべてメモリ内にありました。