【问题标题】:Lumen - Service Provider - Rebinding during unit testLumen - 服务提供者 - 在单元测试期间重新绑定
【发布时间】:2018-10-05 05:30:38
【问题描述】:

我的 bootstrap/app.php 中有以下内容

$app->bind(Auth0\SDK\JWTVerifier::class, function ($app) {
  return new Auth0\SDK\JWTVerifier([
      'supported_algs' => ['RS256'],
      'valid_audiences' => [
        getenv('AUTH0_AUDIENCE'),
        getenv('AUTH0_AUDIENCE_WEB_APP'),
        getenv('AUTH0_AUDIENCE_IOS')
    ],
      'authorized_iss' => [ 'https://' . getenv('AUTH0_DOMAIN') .'/']  // ['AUTH0_DOMAIN']
  ]);
});

在我的一个测试中,我想将此绑定替换为 Mock 类,所以我这样做:

    $this->app->instance(Auth0\SDK\JWTVerifier::class, $jwt_verifier);

但它仍然绑定第一个绑定。我在使用 ServiceProviders 执行 $app->bind 过程时也遇到了问题。不确定这是否相关,但我不知道如何解决这个问题。

【问题讨论】:

    标签: laravel unit-testing lumen


    【解决方案1】:

    您必须重新绑定容器中的绑定,这样的事情对我有用:

    $this->app->bind(Auth0\SDK\JWTVerifier::class, function ($app) use ($jwt_verifier) {
            return $jwt_verifier;
    });
    

    【讨论】:

    • 你的意思是编辑容器以通过测试?
    • 是的,如果您在测试中使用容器并想使用模拟,那么您必须更改容器中的内容(通常是 Laravel 集成/功能测试的情况) .在理想的世界中,服务将被注入,然后您可以在测试期间注入您的模拟,而根本不使用容器。
    猜你喜欢
    • 2017-12-21
    • 2023-01-19
    • 1970-01-01
    • 2016-10-06
    • 2021-07-29
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多