Laravel测试:创建一个新用户

时间:2017-01-31 20:57:55

标签: php laravel unit-testing

我想在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

2 个答案:

答案 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');