根據to the "Database Testing" documentation我可以在每次測試後重置數據庫(第一個選項)。第二個選項是使用事務運行測試。這對我來說似乎是一個更好的方法,但如果我想用事務運行,遷移不會運行。用Laravel黃昏遷移一次
有沒有什麼辦法可以爲運行一次遷移所有的測試過程?
換句話說,我想運行遷移,用事務運行每個測試,然後回滾。我嘗試了文檔所說的內容,但我認爲缺少一些東西。
根據to the "Database Testing" documentation我可以在每次測試後重置數據庫(第一個選項)。第二個選項是使用事務運行測試。這對我來說似乎是一個更好的方法,但如果我想用事務運行,遷移不會運行。用Laravel黃昏遷移一次
有沒有什麼辦法可以爲運行一次遷移所有的測試過程?
換句話說,我想運行遷移,用事務運行每個測試,然後回滾。我嘗試了文檔所說的內容,但我認爲缺少一些東西。
今天有一段時間與此糾纏在一起,並與遷移一起運行遷移似乎有訣竅。我測試的快照如下:
<?php
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class DefaultTest extends DuskTestCase
{
use DatabaseMigrations, DatabaseTransactions;
/**
* A Dusk test example.
*
* @return void
*/
public function test_something()
{
//Add test stuff here
}
}
我有一對夫婦的工廠在我的實際測試,他們似乎通過與試驗破壞後的數據遷移按預期運行。
目前無法與黃昏結合運行DatabaseTransactions。
https://github.com/laravel/dusk/issues/110
用戶記錄的創建,並在瀏覽器中使用它是 在兩個不同的過程來完成。這意味着創建的用戶是數據庫事務的一部分 ,該數據庫事務沒有被提交,因此瀏覽器進程不能訪問 。
數據庫遷移工作。所以你應該使用這些。還要確保你運行一個獨立的測試數據庫,以免混淆你的生產/開發數據庫。
https://laravel.com/docs/5.4/dusk#environment-handling
要強制黃昏運行測試時使用它自己的環境文件, 在項目的根目錄中創建一個.env.dusk。{}環境文件。 例如,如果您將從您的 本地環境啓動黃昏命令,則應創建一個.env.dusk.local文件。
運行測試時,Dusk將備份您的.env文件並將您的黃昏環境重命名爲.env。一旦測試完成,您的.env 文件將被恢復。
由於DatabaseMigrations的工作原因,提供的答案有效。 use DatabaseTransactions
不相關。
從我所瞭解的情況來看,我不認爲使用黃昏時交易可以工作,因爲黃昏中的每個瀏覽器請求都會創建一個單獨的laravel應用程序實例。
以前,phpunit會在內存中創建一個新的應用程序(在setUp
/方法中),然後測試該測試應用程序,然後將其銷燬並設置下一個應用程序。因此,在爲下一次測試啓動新的數據庫連接之前,可以將事務打包(或剛好在內部)創建和銷燬該應用程序的某些部分。使用黃昏時,它是真正的端到端測試(包括瀏覽器,僞造的用戶交互,本地機器上的路由選擇等),這意味着它不是全部包含在運行測試的環境中像他們通常在phpunit中一樣。
黃昏執行以下操作:
.env.dusk.*
並啓動chromedriver(或任何硒像你使用的東西)另外值得一提的是,DatabaseTransactions
特點是在基礎包,而不是黃昏包,所以它不是建/在考慮黃昏包裝。
這也解釋了爲什麼內存中的sqlite不能與黃昏一起工作,因爲一個進程無法訪問另一個進程的內存。
這只是運行數據庫遷移。黃昏時不支持事務,因爲它在瀏覽器中運行。 – Christophvh
好的解決方案的人!真的:) –