2016-10-08 13 views
0

私は新しい統合機能を実装している従来のシステムを持っています。この機能はLaravel Frameworkの下で開発されており、私のテストの1つは、データベース内の解析された電子メール本文を見ることに依存しています。InDatabaseの特殊文字 rと nを見る方法

// Assert 
    $this->seeInDatabase('ticket', ['title' => 'TDD', 'user_id' => $user->id]) 
     ->seeInDatabase('interaction', [ 
      'response' => 'message.\r\n', 
      'user_id' => $user->id 
     ]); 

問題は次のとおりです。

1) tests\Artisan\InboxTest::it_should_parse_valid_email_and_make_ticket 
Unable to find row in database table [interaction] that matched 
attributes 
---> [{"response":"message.\\r\\n","user_id":12}]. 
Failed asserting that 0 is greater than 0. 

はどうやら、seeInDatabaseは、バックスラッシュをエスケープし、情報が実際message.\r\nあるので、それは見つけることはありませんmessage.\\r\\n、探します。

私は自分でそれをエスケープしようとしましたが、同じ結果を得ました。

TL; DR:Laravelにデータベースの文字を表示させるにはどうすればよいですか?

答えて

1

トレイト:

InteractsWithDatabase 

がseeInDatabase方法について説明します。機能が正常にエスケープ任意のデータなしで、それは同じように動作

protected function seeInDatabase($table, array $data, $connection = null) 
{ 
    $database = $this->app->make('db'); 

    $connection = $connection ?: $database->getDefaultConnection(); 

    $count = $database->connection($connection)->table($table)->where($data)->count(); 

    $this->assertGreaterThan(0, $count, sprintf(
     'Unable to find row in database table [%s] that matched attributes [%s].', $table, json_encode($data) 
    )); 

    return $this; 
} 

あなたが見ることができるように、。私は、あなたのようなエッジのケースを扱うような特性のカスタムメソッドを追加することをお勧めします。例:

protected function seeResponseInDatabase($table, $response, $connection = null) 
{ 
    $database = $this->app->make('db'); 

    $connection = $connection ?: $database->getDefaultConnection(); 

    $count = $database->connection($connection)->table($table)->where('response','like', '%' . $response . '%')->count(); 

    $this->assertGreaterThan(0, $count, sprintf(
     'Unable to find row in database table [%s] that matched attributes [%s].', $table, $response 
    )); 

    return $this; 
} 

したがって、配列を渡すのではなく、予想される応答を渡すだけです。 最初にこのルートに進むのではなく、実際には、seeInDatabaseメソッドの$ data配列を調べて、データがwhere句に確実に渡されるようにします。

希望すると、問題を解決するためのヒントが得られます。