【问题标题】:How to "mock" Sentry client in the PHPUnit tests如何在 PHPUnit 测试中“模拟”Sentry 客户端
【发布时间】:2020-06-06 22:28:57
【问题描述】:

如果您需要测试 PHP 应用程序错误处理程序,您必须“模拟”或仅在 Sentry 客户端中禁用远程服务器上的错误发送。这样做的正确方法是什么?

【问题讨论】:

    标签: php laravel mocking phpunit sentry


    【解决方案1】:

    这是 Laravel 的示例,但这种方法应该适用于任何框架。

    use Sentry\Client;
    use Sentry\EventFactory;
    use Sentry\Options;
    use Sentry\Serializer\RepresentationSerializer;
    use Sentry\Serializer\Serializer;
    use Sentry\Transport\NullTransport;
    
    private function mockSentry(): void
    {
        /** @var \Sentry\State\Hub $sentry */
        $sentry = $this->app['sentry']; // Get sentry object from Laravel's container
    
        $client = new Client(
            new Options(),
            new NullTransport(),
            new EventFactory(
                new Serializer(new Options()),
                new RepresentationSerializer(new Options()),
                new Options(),
                '1',
                '1',
            ),
        );
        $sentry->bindClient($client);
    }
    

    【讨论】:

    • 你为什么连一分钟都不回答自己的问题?
    • @ArSeN 因为它受到鼓励stackoverflow.com/help/self-answer
    • 我正在使用 Laravel 6.11 和 sentry-laravel:1.71.,配置已根据文档设置,现在问题是在我的处理程序测试中从服务容器中解析哨兵,我不断得到Illuminate\Contracts\Container\BindingResolutionException: Target class [sentry] does not exist. 任何想法为什么我无法从容器中解析哨兵?我也无法从容器中解决任何问题
    猜你喜欢
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多