2016-04-17 6 views
0

私のアプリケーションに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の提案によると

==========

検証は事前に行われます。しかし、私はまだ同じエラーが発生します。

答えて

1

Dir.exists?(path)は、パスがディレクトリの場合はtrue、それ以外の場合はfalseを返します。​​では、完全なパス名を渡しています。これは、ディレクトリ以外のファイルを指していると思います。

http://ruby-doc.org/core-2.1.2/Dir.html#method-c-exists-3F

+0

これはポイントです:valid_database?データベースが存在する場合はStandardErrorを発生します。これは、Dir.mkdirの前でチェックされます。このエラーは、Dir.mkdirでエラーが発生する前に発生するはずです。 –

+0

しかし、そこには、@ピーターアルフン!あなたはその投稿を読んでいないのですか?コードはそこにあります!方法をもう一度お読みください! –

+0

メソッドvalid_database内の唯一のポイントは?すでにpasseという名前のディレクトリが存在するかどうかテストします。存在する場合、データバードはすでに存在するため作成できません。 –

関連する問題