Laravel 单元测试显示完全错误
Posted
技术标签:
【中文标题】Laravel 单元测试显示完全错误【英文标题】:Laravel unit testing show complete error 【发布时间】:2017-03-07 07:11:41 【问题描述】:我正在尝试为我的laravel 5.2
项目创建一个测试,该测试将测试休息资源控制器中的注册页面。当我用我的测试的确切输入手动测试它时,一切正常,但是当我用phpunit
测试它时,我被重定向到一个错误页面,使我的页面断言失败。但是,该错误显示了断言失败的错误,而不是错误页面上的内容,因此没有显示测试失败的原因。我怎么能看到这个?
测试用例:
class registerTest extends TestCase
use WithoutMiddleware;
public function testRegisterCompanyCorrectly()
$this->actAsAdmin();
$this->visit('/Companies/create')
->type('testCompany', 'CName')
->type('www.testCompany.com', 'CUrl')
->type('testManager@gmail.com', 'Mail')
->type('John Doe', 'Name')
->type('Keith Richards', 'Password')
->type('Keith Richards', 'CPassword')
->press('Registreren')
->seePageIs('/Companies/3')
;
private function actAsAdmin()
$user = User::find(1);
$this->actingAs($user);
'
phpunit 错误:
There was 1 failure:
1) registerTest::testRegisterCompanyCorrectly
Did not land on expected page [http://localhost/Companies/3].
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'http://localhost/Companies/3'
+'http://localhost/Companies'
C:\Users\Stefan\Documents\producten\Applicatie\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\InteractsWithPages.php:170
C:\Users\Stefan\Documents\producten\Applicatie\tests\registerTest.php:34
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:176
C:\xampp\php\pear\PHPUnit\TextUI\Command.php:129
FAILURES!
Tests: 5, Assertions: 14, Failures: 1.
【问题讨论】:
它希望登陆 /companies/3 并改为登陆 /companies。您确定当您注册一家新公司时,您会登陆新创建资源的实际页面吗?如果我错了,请纠正我,但是将硬编码的数字传递给您的 seePageIs 方法看起来也很奇怪,因为这可能会随着每个新创建的资源而改变。 如果您遇到基本注册错误(错误值等),我的资源控制器会将您返回到创建页面。如果成功,它会将您发送到新公司 (/Companies/id) 的页面。但是,在制作页面时,我发现如果 laravel 遇到错误,它会重定向到 /Companies/ 并显示错误消息。问题是,无法手动重现它或显示错误,我找不到问题。此外,我目前使用数据库迁移和播种来准备测试,但一旦成功,我想重构它并确保没有硬编码值。 我对 phpunit 不是很有经验,但您可以尝试使用 --verbose 或 --debug 运行它,看看是否可以获得一些额外的信息。 如果您的应用程序确保用户只能由管理员用户创建,我敢打赌,您的迁移和种子无法在测试环境中创建用户。尝试暂时禁用此检查并再次运行测试。 这里的问题是您的测试不是单元测试。这是一个功能性测试,它应该验证某种功能的平静在一般情况下是否有效,但不会给你太多细节。如果您有一个单元测试来验证特定验证类是否按预期工作,那么您将获得有关实际错误的更详细信息。功能测试的重点是确保您知道您的应用程序的特定功能(用户注册)存在某些问题,以便您知道在哪里进行调查。 【参考方案1】:调查错误的一种方法是在您的app/Exceptions/Handler.php
中激活Illuminate\Foundation\Validation\ValidationException
的错误报告。
protected $dontReport = [
// ValidationException::class,
];
如果您再次运行测试,您的日志文件中应该有一个堆栈跟踪。
【讨论】:
以上是关于Laravel 单元测试显示完全错误的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.5 中 PHP 单元测试中的类验证器错误
Laravel 5.2 单元测试错误:BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::make()