验证时Laravel Jetstream + Livewire + Teams FeatureTest问题 [英] Laravel Jetstream + Livewire + Teams FeatureTest problems when authenticate

查看:37
本文介绍了验证时Laravel Jetstream + Livewire + Teams FeatureTest问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Teams和Livewire中使用了最新的laravel Jetstream安装.一切都按预期工作,但是当我尝试用livewire做一些测试时,出现此错误

Im using a fresh instalation of laravel Jetstream with Teams and Livewire. Everything was working as expected but when I am trying to do some tests with livewire I get this error

1) Tests\Feature\ContactFormTest::contact_form_page_contains_contact_form_livewire
ErrorException: Trying to get property 'id' of non-object (View: /var/www/livewire/resources/views/navigation-dropdown.blade.php) (View: /var/www/livewire/resources/views/navigation-dropdown.blade.php) (View: /var/www/livewire/resources/views/navigation-dropdown.blade.php)
/var/www/livewire/vendor/laravel/jetstream/src/HasTeams.php:28
/var/www/livewire/vendor/livewire/livewire/src/CompilerEngine.php:38
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:60
/var/www/livewire/vendor/livewire/livewire/src/LivewireViewCompilerEngine.php:32
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:61
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/View.php:139
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/View.php:122
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/View.php:91
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Http/Response.php:62
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Http/Response.php:34
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:765
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:737
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:691
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php:29
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php:44
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:77
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Session/Middleware/AuthenticateSession.php:58
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:116
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:62
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:67
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:693
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:668
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:634
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Routing/Router.php:623
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:166
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:128
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:21
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php:87
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/fruitcake/laravel-cors/src/HandleCors.php:37
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/fideloper/proxy/src/TrustProxies.php:57
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:167
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:103
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:141
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:110
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:508
/var/www/livewire/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:292
/var/www/livewire/tests/Feature/ContactFormTest.php:20

好像就是与团队有关的事情.有谁知道如何解决此问题?预先感谢

Looks like thats something related with teams. Does anyone knows how to workaround this issue? thanks in advance

推荐答案

我刚才有这个问题.这是因为工厂用户没有创建个人团队.

I just had this problem a while ago. This is caused because factory Users doesn't have a personal team created.

$user = App\Models\User::factory()->create()
dd($user->personalTeam()); // null

您可以使用强化操作中的相同代码来强制创建个人团队:

You can force the personal team creation using the same code inside the fortify action:

App \ Actions \ Fortify \ CreateNewUser @ createTeam

App\Actions\Fortify\CreateNewUser@createTeam

然后您的测试应如下所示:

Then your tests should look like this:

/** @test */
public function test_livewire_component_is_present()
{
    $user = User::factory()->create();
    //CreateNewUser@createTeam
    $user->ownedTeams()->save(Team::forceCreate([
        'user_id' => $user->id,
        'name' => explode(' ', $user->name, 2)[0]."'s Team",
        'personal_team' => true,
    ]));
    // ... The rest of your test. Here an example:
    $this
        ->get('/') //the route where your livewire component is declared
        ->assertSeeLivewire(''); // your livewire-component name
}

为避免在每次身份验证中使用此巨大的代码块,您可以在内部创建一个辅助函数signIn()

And to avoid using this gigantic block of code in every authentication you can create a helper function signIn() inside

Test \ TestCase

Test\TestCase

类似的东西:

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;
    public function signIn($user=false)
    {
        if(!$user) {
            $user = User::factory()->create();
        }

        $user->ownedTeams()->save(Team::forceCreate([
            'user_id' => $user->id,
            'name' => explode(' ', $user->name, 2)[0]."'s Team",
            'personal_team' => true,
        ]));

        $this->be($user);
    
        return $user;
    }
    // ...
}

然后您可以在测试中使用

Then you can use in your tests

/** @test */
public function test_foo_bar()
{
    $user = $this->signIn();
    ...
}

这篇关于验证时Laravel Jetstream + Livewire + Teams FeatureTest问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆