Laravel测试phpunit按NotFoundHttpException

时间:2017-01-09 08:06:48

标签: php laravel testing phpunit

我尝试使用Laravel 5.1.40(LTS),php 5.6.28和phpunit 4.8.27为项目设置phpunit测试。对不起,如果以前这个问题已经解决了,但我找不到任何东西。

public function testAdminLogin()
{
     $this->visit('/auth/login')
         ->type('email@address.com', 'email')
         ->type('1234567890', 'password')
         ->press('Login');
}

press('STRING')似乎存在<button><input>作为提交按钮的问题。以下是我收到的错误消息。

1) ExampleTest::testAdminLogin
A request to [http://localhost/auth/login] failed. Received status code [500].

C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Foundation\Testing\InteractsWithPages.php:165
C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Foundation\Testing\InteractsWithPages.php:63
C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Foundation\Testing\InteractsWithPages.php:85
C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Foundation\Testing\InteractsWithPages.php:684
C:\xampp\htdocs\project\vendor\laravel\framework\src\Illuminate\Foundation\Testing\InteractsWithPages.php:671
C:\xampp\htdocs\project\tests\ExampleTest.php:52
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:176
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:129

但是,当我将<button>标记更改为<a>标记时,请为其添加ID,并将press(STRING)函数替换为click(ID)函数,测试经过。我可以将<button>更改为<a>,但这只是一个临时修复,未来的情况可能不允许标记更改。

以下是带有<button>标记的HTML表单。

<form action="/auth/login" method="POST" class="form-horizontal">
    <div class="form-group">
        <label for="email" class="col-sm-4 control-label">E-Mail</label>
        <div class="col-sm-6">
            <input type="email" name="email" class="form-control" value="{{ old('email') }}" autocomplete="off">
        </div>
    </div>
    <div class="form-group">
        <label for="password" class="col-sm-4 control-label">Password</label>
        <div class="col-sm-6">
            <input type="password" name="password" class="form-control" autocomplete="off">
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-4 col-sm-6">
            <button type="submit" class="btn btn-default btn-login">Login</button>
        </div>
    </div>
</form>

1 个答案:

答案 0 :(得分:0)

您说您手动定义了身份验证路由。在这种情况下,您应该有POST路由发送登录表单:

Route::post('auth/login', ....

它适用于a href,因为它会发送您有路由的GET请求。表格默认发送POST请求。