2017-10-30 3 views
0

私はmongodbメソッドを単体テストしようとしているので、テスト後にmongoデータベース全体をフラッシュするtearDown()メソッドが必要です。ここでPHP 7 MongoDB - すべてのデータベースを落とす

は関数である。

public function tearDown() 
{ 
    $databases = $this->mongoClient->listDatabases(); 
    foreach ($databases as $db) { 
     $db.dropDatabase(); 
    } 
} 

それは私の$ DB上のメソッドを参照することはできませんが。

/var/www/html/tests/backend/Service/MongoStorageTest.php:35: 
class MongoDB\Model\DatabaseInfo#1563 (3) { 
    public $name => 
    string(5) "local" 
    public $sizeOnDisk => 
    double(83886080) 
    public $empty => 
    bool(false) 
} 

/var/www/html/tests/backend/Service/MongoStorageTest.php:35: 
class MongoDB\Model\DatabaseInfo#1483 (3) { 
    public $name => 
    string(2) "db" 
    public $sizeOnDisk => 
    double(83886080) 
    public $empty => 
    bool(false) 
} 

は、実際にそれらを選択するための実用的なまたは簡単な方法はありますか、単にすべてをドロップします。

Error: Call to undefined function Api\Test\Unit\dropDatabase() 

それだけで、実際のデータベース自身、私のDBSのいくつかの情報モデルをしませ戻る)(listDatabasesです一つの方法で?

+0

'$ db.dropDatabase();' - PHPは使用しません。 '$ db-> dropDatabase();'指定されたdropDatabaseメソッドは存在します – malarzm

+0

あなたの質問には答えられないと思われる答えがありますか?もしそうなら、正確に答えなければならないものを明らかにするために答えにコメントしてください。実際にあなたが質問した質問に答えた場合は、[あなたの回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)に質問してください。 ask –

答えて

1

method to dropMongoClientに実際にあり、そしてもちろん代わりlistDatabases()

public function tearDown() 
{ 
    $databases = $this->mongoClient->listDatabases(); 
    foreach ($databases as $db) { 
     $this->mongoClient->dropDatabase($db->getName()); 
    } 
} 

から返されMongoDB\Model\DatabaseInfo種類からgetName()ありますselectDatabase()ができ、MongoDBの\ Databaseでdrop()メソッドを使用します。

public function tearDown() 
{ 
    $databases = $this->mongoClient->listDatabases(); 
    foreach ($databases as $db) { 
     $this->mongoClient->selectDatabase($db->getName())->drop(); 
    } 
} 

しかし、私の心にはもう少し簡潔で、最初のフォームはより表現力があります。

"データベース"は名前空間の基本コンテナであるため、実際には "すべてを削除"するコマンドはありません。リストのリスティングとループは、あなたがそれを行う方法です。結論は、"command reference"になければ、そのようなことはありません。

+0

私はMongoClientを使用していません。PHPマニュアルには、[非推奨](http://php.net/manual/en/class.mongoclient.php)と書かれています。私はMongoDB/Clientライブラリに入っています。 – MattSom

+0

@MattSomマニュアルはPHPLIBドライバの解答からリンクしています。実際に見るときにはっきりと示されています。あなたが指しているドライバではありません。リンクのドキュメントをお読みください。 –

+0

私はそこにあなたを失ったことを認めますが、私はMongoClientソリューションが私にとってうまくいかないことを意味しました。それでも、getName()ロジックは私が探していたものです。ありがとうございました。 – MattSom

関連する問題