我想在Laravel中测试我的注册表单。我这样做:
$this->visit('/auth/signup/free')
->type('First Name', 'first_name')
->type('test-phpunit@example.org', 'email')
->type('mypassword', 'password')
->press('Get Started');
但是我有一个错误500,因为我然后将用户重定向到一个欢迎页面,该页面测试当前用户的某些属性,而这些属性不存在:
A request to [http://localhost/welcome] failed. Received status code [500].
Caused by
exception 'ErrorException' with message 'Undefined property: App\Models\User::$active' in D:\workspace\myproject\app\Models\User.php:48
Stack trace:
#0 D:\workspace\myproject\app\Models\User.php(48): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined prope...', 'D:\\workspace\\my...', 48, Array)
#1 D:\workspace\myproject\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(2670): App\Models\User->active()
[...]
用户出现在数据库中,但似乎Laravel无权访问其任何属性。
我怎么能处理这个?
编辑:我正在使用Laravel 5.3。我和这个家伙有同样的错误:https://laracasts.com/discuss/channels/testing/51-phpunit-tests-fail-without-middleware/replies/89708
答案 0 :(得分:1)
让我猜一下。您可能正在观察错误,例如在没有身份验证的情况下访问/welcome
。检查/welcome
页面是否为未经授权的请求提供了此类错误。
通过Google搜索says (it is marked as a solution),Laravel在测试时可能会遇到加密Cookie的问题。尝试禁用EncryptCookies
中间件进行测试。
Laravel 5.4中的黄昏确实表现得像真正的浏览器,它可能会帮助你。
答案 1 :(得分:0)
<强>更新强>
实际上,它取决于Laravel版本。
如果您使用的是最新版本(5.4),那么我认为您倒转了key => value
。
而不是
->type('test-phpunit@example.org', 'email')
做
->type('email', 'test-phpunit@example.org')
对于他们所有人。
然后,在某个地方你需要断言一些东西,看看用户是否被正确地重定向到主页。例如:->assertPathIs('/home');
如果你在5.3,那么你的关键值是正常的。只需在末尾添加一个断言即可查看。喜欢:->seePageIs('/welcome');