我是Laravel新手。在Homestead中使用本地开发环境尝试运行简单测试
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
Run Code Online (Sandbox Code Playgroud)
route / web.php:
Route::get('/', function () {
return view('main');
});
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Run Code Online (Sandbox Code Playgroud)
运行phpunit返回404错误
vagrant @ homestead:〜/ code / laravel $ phpunit Sebastian Bergmann和贡献者的PHPUnit 6.4.3。
。F。3/3(100%)
时间:1.07秒,内存:10.00MB
有1个失败:
1)Tests \ Feature \ UserTest :: testBasicTest预期状态码为200,但收到404。断言false为true失败。
/home/vagrant/code/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:78 /home/vagrant/code/laravel/tests/Feature/UserTest.php:25
我试图用这些方法修复它
1. Laravel phpunit总是404 updateTestCase.php
protected $baseUrl = 'http://localhost'
change with
protected $baseUrl = 'http://laravel.local'
Run Code Online (Sandbox Code Playgroud)
2. https://github.com/dingo/api/issues/540及其旁边 https://github.com/dingo/api/issues/571
use Illuminate\Foundation\Testing\WithoutMiddleware;
class BankTest extends TestCase {
use WithoutMiddleware;
Run Code Online (Sandbox Code Playgroud)
将.env中的APP_URL更改为
APP_URL=laravel.local
Run Code Online (Sandbox Code Playgroud)这些都没有帮助
'laravel.local'在浏览器中正常工作
请帮我解决
小智 6
我有同样的问题,如果我用php artisan serve运行laravel,它必须是:
APP_URL=http://127.0.0.1:8000/
Run Code Online (Sandbox Code Playgroud)
的APP_URL,必须是完全网站的URL。
该网站正在运行,但是我没有正确地使用该常量,PHPUnit一直在说404。
Laravel 测试运行并期望环境变量。他们期望诸如ENV_URL, ENV_KEY,... 之类的变量,具体取决于您的测试用例。重要的是,该ENV_URL变量设置为http://localhost忽略你的 laravel/服务器设置。测试在这里的工作方式有所不同。
在 内部phpunit.xml,该行<server name="APP_ENV" value="testing"/>指定要使用哪个测试文件。value="testing"期望 a 使用该.env.testing文件(如果存在)并回退到.env.
从现在开始,您可以采取两种方法:
.env.testing:.env并将其命名为.env.testing.phpunit.xml包含该.env.testing文件,如下所示<server name="APP_ENV" value="testing"/>.env.testing用作APP_URL=http://localhost其 URL。您通常在哪个 URL 下提供应用程序并不重要。php artisan cache:clear您可以对 phpunit.xml 中的所有 ENV 值进行编码,如下所示
...
<php>
<server name="APP_URL" value="http://localhost"/>
<server name="APP_KEY" value="base64:e8+BZAzKrSR/LprdHQ2TfMaw+DOTWYmgpkFkEJHV+zw="/>
<server name="DB_CONNECTION" value="mysql"/>
<server name="DB_HOST" value="127.0.0.1"/>
<!-- More ENV values -->
...
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<!-- <server name="DB_CONNECTION" value="sqlite"/> -->
<!-- <server name="DB_DATABASE" value=":memory:"/> -->
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
使用主.env文件并APP_URL覆盖phpunit.xml. 为此,文件不应该存在,或者如果存在则.env.testing删除。<server name="APP_ENV" value="testing"/>
...
<php>
<server name="APP_ENV" value="testing"/>
<!-- IMPORTANT - Overwrite the APP_URL -->
<server name="APP_URL" value="http://localhost"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<!-- <server name="DB_CONNECTION" value="sqlite"/> -->
<!-- <server name="DB_DATABASE" value=":memory:"/> -->
<server name="MAIL_MAILER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
<server name="TELESCOPE_ENABLED" value="false"/>
</php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
我在浏览器中使用以下URL运行我的应用程序。 http:// localhost / app / public /
下一行的默认单元测试失败。它得到404响应而不是200。
$response = $this->get('/');
$response->assertStatus(200);
阅读以上评论后,我如下更改了.env文件中的APP_URL。
APP_URL=http://localhost
但是我仍然遇到404错误。经过一番尝试和错误后,我发现我需要清除配置缓存。
php artisan config:cache
这成功了,我的测试开始了!!