2017-02-10 164 views
1

這是測試數據庫持久性的簡單單元測試,無法使其工作。繼續收到錯誤消息。Laravel使用codeception進行測試:單元測試模型的save()方法不會持續

看起來像save()方法不能插入記錄到testdb,我改變斷言與測試數據庫中的現有記錄,它的工作原理。

$ this-> tester-> seeInDatabase('statuses',['name'=>'Status4']);

花了幾個小時的時間排除故障,沒有任何線索。

感謝, 傑克

There was 1 failure: 

    --------- 
    1) UserTest: Saving status 
    Test tests\unit\App\UserTest.php:testSavingStatus 
    No matching records found for criteria {"name":"Status4"} in table statuses 
    Failed asserting that 0 is greater than 0. 
    #1 Codeception\Module\Db->seeInDatabase 
    #2 C:\MAMP\htdocs\noc\tests\_support\_generated\UnitTesterActions.php:3725 
    #3 C:\MAMP\htdocs\noc\tests\unit\App\UserTest.php:34 
    #4 App\UserTest->testSavingStatus 

    public function testSavingStatus() 
     { 
      $status = new Status(); 
      $status->setName('Status4'); 
      $status->save(); 

      $this->assertEquals('Status4', $status->name); 
      $this->tester->seeInDatabase('statuses', ['name' => 'Status4']); 
     } 

    actor: Tester 
    paths: 
     tests: tests 
     log: tests/_output 
     data: tests/_data 
     support: tests/_support 
     envs: tests/_envs 
    settings: 
     bootstrap: _bootstrap.php 
     colors: false 
     memory_limit: 1024M 
    extensions: 
     enabled: 
      - Codeception\Extension\RunFailed 
    modules: 
     config: 
      Db: 
       dsn: 'mysql:host=localhost;dbname=testdb' 
       user: 'root' 
       password: 'root' 
       dump: tests/_data/dump.sql 
       populate: true 
       cleanup: false 
       reconnect: true 
+0

你使用Laravel模塊嗎?如果你這樣做,嘗試使用seeRecord方法http://codeception.com/docs/modules/Laravel5#seeRecord – Naktibalda

+0

我可以稍後嘗試,但看起來不像記錄已插入。 Seeindatabase適用於現有記錄。 –

回答

0

DB模塊無法看到記錄,因爲它使用一個單獨的連接並Laravel5模塊封裝測試in transaction

清理:布爾值,默認爲true - 所有數據庫查詢將在事務中運行,該事務將在每次測試結束時回滾。

使用seeRecord Laravel5模塊的方法代替或禁用清理,如果您有其他原因使用Db模塊。

+0

是的,看到記錄拯救了我的生命,感謝一百萬。如果我想使用DB模塊,如何禁用清理? –

+0

您必須在Laravel5模塊下添加'cleanup:false'選項 – Naktibalda