我目前有PhpStorm成功运行Dusk Test但是,我希望它能够使用我设置的测试数据库。在线其他线程和资源,我创建了.env.dusk.local和phpunit.dusk.xml,指向我创建的测试数据库。当我在PhpStorm中运行黄昏测试时,在Chromium中呈现的应用程序不使用这些文件中描述的测试数据库,但是当我在终端中使用php artisan dusk运行它时,它使用正确的数据库。
似乎我需要让phpstorm知道运行测试时要使用的env文件。关于如何使这项工作的任何线索。
答案 0 :(得分:1)
如果您使用artisan dusk
运行测试,请确保您正在运行黄昏的APP_ENV
设置与.env.dusk.[environment]
设置匹配。
Dusk浏览器实例总是使用当前的.env文件...
来自Laravel Dusk文档:
运行测试时,Dusk将备份.env文件并将您的Dusk环境重命名为.env。测试完成后,您的.env文件将被恢复。
如果您没有运行artisan dusk
命令来运行Dusk测试,我怀疑在运行测试套件之前和之后您必须执行与此代码类似的操作:
https://github.com/laravel/dusk/blob/2.0/src/Console/DuskCommand.php#L136
如果你开始工作,我对你的表现非常感兴趣。
答案 1 :(得分:0)
你需要添加DuskTestCase.php这样的东西:
/**
* @beforeClass
* @return void
*/
public static function prepare()
{
//static::startChromeDriver();
copy(base_path('.env'), base_path('.env.backup'));
copy(base_path('.env.dusk.local'), base_path('.env'));
(new Dotenv(base_path()))->overload();
}
/**
* @afterClass
* @return void
*/
public static function finish()
{
copy(base_path('.env.backup'), base_path('.env'));
unlink(base_path('.env.backup'));
(new Dotenv(base_path()))->overload();
}
答案 2 :(得分:0)
Thx Andriy,我改进了您的代码,这对我有用:
use Dotenv\Dotenv;
public static function basePath($path = '') {
return __DIR__. '/../' . ($path ? DIRECTORY_SEPARATOR.$path : $path);
}
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
copy(DuskTestCase::basePath('.env'), DuskTestCase::basePath('.env.backup'));
copy(DuskTestCase::basePath('.env.dusk.local'), DuskTestCase::basePath('.env'));
(new Dotenv(DuskTestCase::basePath()))->overload();
static::startChromeDriver();
}
public static function closeAll()
{
copy(DuskTestCase::basePath('.env.backup'), DuskTestCase::basePath('.env'));
unlink(DuskTestCase::basePath('.env.backup'));
(new Dotenv(DuskTestCase::basePath()))->overload();
return parent::closeAll();
}
.. since base_path()和finish()在此DuskTestCase类中不起作用
答案 3 :(得分:0)
我发现本文效果很好,并描述了问题所在。
https://harings.be/running-laravel-dusk-tests-from-phpstorm-atf2v
tests / DuskTestCase.php
tests/DuskTestCase.php
<?php
namespace Tests;
use Dotenv\Dotenv;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\TestCase as BaseTestCase;
use Facebook\WebDriver\Chrome\ChromeOptions;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
abstract class DuskTestCase extends BaseTestCase
{
use CreatesApplication;
use DatabaseMigrations;
public static function basePath($path = '')
{
return __DIR__ . '/../' . ($path ? DIRECTORY_SEPARATOR . $path : $path);
}
/**
* Prepare for Dusk test execution.
*
* @beforeClass
* @return void
*/
public static function prepare()
{
static::startChromeDriver();
}
public static function setUpBeforeClass()
{
copy(self::basePath('.env'), self::basePath('.env.backup'));
copy(self::basePath('.env.dusk.local'), self::basePath('.env'));
(new Dotenv(self::basePath()))->overload();
parent::setUpBeforeClass();
}
public static function tearDownAfterClass(): void
{
copy(self::basePath('.env.backup'), self::basePath('.env'));
unlink(self::basePath('.env.backup'));
(new Dotenv(self::basePath()))->overload();
parent::tearDownAfterClass();
}
/**
* Create the RemoteWebDriver instance.
*
* @return \Facebook\WebDriver\Remote\RemoteWebDriver
*/
protected function driver()
{
$options = (new ChromeOptions)->addArguments([
'--disable-gpu',
'--headless',
'--window-size=1920,1080',
]);
return RemoteWebDriver::create(
'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
ChromeOptions::CAPABILITY, $options
)
);
}
}