【问题标题】:How to assert $next in Laravel Middleware如何在 Laravel 中间件中声明 $next
【发布时间】:2020-06-01 09:04:33
【问题描述】:

运行 7.10 的 Lavarvel 应用程序

我有一个在多个路由上被调用的中间件。它检查用户是否建立了正确的关系以到达所需的目的地(这并不重要)。

我想要一个简单地断言用户访问中间件中的$next($request) 的测试。我当然可以只打一个端点,然后断言一些东西会反过来验证中间件,但是所有路由都命中外部 api 以获取我可以在测试中模拟的一些其他数据,这些看起来都很丑陋只是为了测试一个中间件类。

我的测试可以建立相关关系等,所以每当调用中间件时,它应该允许我直接进入。

如果我这样做......

/** @test */
public function middleware_successful_test()
{
    $user = factory(User::class)->create();
    // some other factoried user relations here

    $this->actingAs($user);

    $request = new Request;

    $middleware = app(MiddlewareClass::class);

    $result = $middleware->handle($request, function ($req) {});
    // don't know what assert here.  $result is basically empty
}

任何提示,欢迎提出建议。

【问题讨论】:

  • 也许使用管道?

标签: laravel testing phpunit middleware


【解决方案1】:

通常我不会对中间件进行单元测试,而是将其作为一项功能进行测试。

对于您的情况,我会利用您提供下一个闭包并获得结果。返回 true 并断言它是返回的内容,因此已调用闭包。

$result = $middleware->handle($request, function ($req) { return true;});

$this->assertSame(true, $result);

【讨论】:

    猜你喜欢
    • 2020-03-31
    • 2012-07-13
    • 1970-01-01
    • 2015-10-03
    • 2020-07-22
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    相关资源
    最近更新 更多