私のアプリケーションにFileSystemという名前のモジュールがあります。これは基本的なファイルシステム機能を実行します。ここに関連するコードがあります。Ruby:ディレクトリの作成をテストする際に誤って例外が発生しました
module TxtDB
module FileSystem
def self.create_database(db)
fpdb = db_full_path(db)
Dir.mkdir(fpdb) unless ((not valid_parameter?(db)) or (not valid_database?(fpdb)))
end
private
def self.valid_parameter?(db)
raise TxtDB::NIL_PARAMETER_ERROR unless (not db == nil)
raise TxtDB::NOT_A_STRING_ERROR unless (db.is_a? String)
raise TxtDB::EMPTY_PARAMETER_ERROR unless (not db.empty?)
true
end
def self.valid_database?(db)
raise TxtDB::DATABASE_ALREADY_EXISTS_ERROR unless (not Dir.exist?(db_full_path(db)))
true
end
def self.db_full_path(db)
"#{TxtDB::BASE_DIRECTORY}/#{db}"
end
end
end
そして、これは私が私のテストを実行したときに、私はこのエラーを得たことが起こる
it 'raises a StandardError (Database already exists) if it receives the name of an existing database' do
base_path = TxtDB::BASE_DIRECTORY
if (not Dir.exist?(base_path)) then
Dir.mkdir(base_path)
end
db_path = File.join(TxtDB::BASE_DIRECTORY,'testedb')
if (not Dir.exist?(db_path)) then
Dir.mkdir(db_path)
end
expect {
TxtDB::FileSystem::create_database('testedb')
}.to raise_error(StandardError, TxtDB::DATABASE_ALREADY_EXISTS_ERROR)
end
この機能のための私のRSpecのテストで、私は物事を見るように
expected StandardError with "Database already exists", got #<Errno::EEXIST: File exists @ dir_s_mkdir - txtdb/testedb>
、これはいけません私が存在をテストしているからです。Dir.mkdirを呼び出してください。しかし、私は明らかに間違っています。なぜなら、エラーが発生するからです。質問は:どこが間違っていますか? (下記答える参照)
def self.create_database(db)
fpdb = db_full_path(db)
if (valid_parameter?(db) and valid_database?(fpdb)) then
Dir.mkdir(fpdb)
end
end
今すぐ疑いがあると、私は私の方法を変更ピーターAlfvinの提案によると
==========
検証は事前に行われます。しかし、私はまだ同じエラーが発生します。
これはポイントです:valid_database?データベースが存在する場合はStandardErrorを発生します。これは、Dir.mkdirの前でチェックされます。このエラーは、Dir.mkdirでエラーが発生する前に発生するはずです。 –
しかし、そこには、@ピーターアルフン!あなたはその投稿を読んでいないのですか?コードはそこにあります!方法をもう一度お読みください! –
メソッドvalid_database内の唯一のポイントは?すでにpasseという名前のディレクトリが存在するかどうかテストします。存在する場合、データバードはすでに存在するため作成できません。 –