2017-01-31 81 views
1

我想在Laravel测试我的注册表单。我这样做:Laravel测试:创建一个新用户

$this->visit('/auth/signup/free') 
     ->type('First Name', 'first_name') 
     ->type('[email protected]', '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

您使用的是什么版本的Laravel? – EddyTheDove

+0

我正在使用Laravel 5.3。 – Kevin

回答

0

更新

实际上,它取决于Laravel版本。

如果您使用的是最新版本(5.4),那么我认为你倒过来了key => value。 而不是

->type('[email protected]', 'email') 

->type('email', '[email protected]') 

对于所有的人。

然后,您需要声明某些内容以查看用户是否被正确重定向到主页。例如:->assertPathIs('/home');

如果你在5.3,那么你的关键值是没问题的。只需在最后添加一个断言即可查看。像:->seePageIs('/welcome');

+0

Laravel docs说' - > type('Taylor','name')'。所以他正确使用它。 –

+0

选中此:https://laravel.com/docs/5.4/dusk#creating-browsers – EddyTheDove

+0

我猜,他使用5.3或更高版本,而不是黄昏。 –

1

让我猜。您可能正在观察错误,如未经身份验证访问/welcome。检查/welcome页面是否为未经授权的请求提供了此类错误。

使用Google搜索says (it is marked as a solution) Laravel在测试时可能会遇到加密cookie的问题。尝试禁用EncryptCookies中间件进行测试。

Laravel 5.4中的黄昏确实表现得像一个真正的浏览器,它可能会帮助你。

+0

我有一个中间件在这个页面上重定向用户,如果没有连接,所以这个应该永远不会出现。我试图禁用这个中间件没有成功。用户将重定向到欢迎页面,因为我们点击“注册”按钮,然后创建用户,登录并直接重定向他。 – Kevin