1

,などのすべての特殊文字:と空白スペースをすべて削除するメソッドを単体テストする必要があります。

テスト対象のメソッドは、ファイルの各行を個別の配列位置に格納します。

メソッドがテキスト ファイルのすべての特殊文字を削除したかどうかをテストするにはどうすればよいですか?

4

2 に答える 2

1

メソッド呼び出しの後にファイルを書き込み、正規表現を使用して、不要な特殊文字がないことを確認します。または、ファイルの内容を、達成したい結果を含むファイルと比較します。

于 2013-07-11T01:26:25.197 に答える
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のタグを付けたため、実際のファイル システム アクティビティは発生しませんでした。ファイルシステムは偽物で、すべてメモリ内にありました。

于 2014-02-21T18:45:39.957 に答える