微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Laravel 中使用 Twilio REST 客户端对控制器进行功能测试?

如何解决如何在 Laravel 中使用 Twilio REST 客户端对控制器进行功能测试?

我正在向没有测试的遗留(继承)PHP/Laravel 7.x 应用程序添加测试覆盖率。

以下是我需要介绍的控制器的简化摘录:

// PhoneVerificationController.PHP

<?PHP

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use Twilio\Rest\Client;
use Vanguard\Http\Controllers\Api\ApiController;
// ...

class PhoneVerificationController extends ApiController {

    // ...

    private $twilio;

    public function __construct(UserRepository $users)
    {
        // ...
        $this->twilio = new Client(config('services.twilio.sid'),config('services.twilio.token'));
        // ...
    }

    public function sendVerifySms(Request $request)
    {
        // ...
            $lookup = $this->twilio->lookups->v1->phoneNumbers($telephone)->fetch([
                "addOns" => [
                    "twilio_carrier_info"
                ]
            ]);
        // ...
        // 
        return response()->json(['status' => 'OK']);
    }

    // ...
}

这是我要编写的测试的简化摘录:

// PhoneControllerTest.PHP

<?PHP

namespace Tests\Feature\Api;

use Illuminate\Foundation\Testing\DatabaseTransactions;
use Tests\BuildsScenario;
use Tests\Feature\ApiTestCase;
use App\User;

class PhoneControllerTest extends ApiTestCase
{
    use DatabaseTransactions;
    use BuildsScenario;

    public function test_api_phone_send_sms()
    {
        $this->buildScenario();

        // Should I Mock the Twilio REST Client here?

        $response = $this->actingAs($this->client)
             ->json('POST','/api/verifications/phone/send');

        // Assertions
    }
}

此时我知道代码,就像现在一样,可能很难测试,所以重构它以使其可测试是可以接受的。

我不明白的是,可以将这种创建 REST 客户端实例的方式更改为使用依赖项容器:

    $this->twilio = new Client(config('services.twilio.sid'),config('services.twilio.token'));

    $this->twilio = resolve('twilio.client');

但即使这样,我也很难理解我是否应该嘲笑客户。即使我这样做了,我也不确定如何表达对 shouldReceive()

之类的调用$this->twilio->lookups->v1->phoneNumbers($telephone)->fetch(...) 期望

注意:我知道代码被简化了,其想法是提供对问题的关注并减少测试中无关代码的噪音。如果需要,我可以提供更多详细信息。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。