对于如何开始测试与外部API(Vimeo API)的集成,我遇到了很多困难,例如删除视频-上传视频等。
这样做是一个坏主意吗
use Tests\TestCase;
use Vimeo\Laravel\VimeoManager;
class VimeoApiTest extends TestCase
{
protected function setUp() : void
{
parent::setUp();
$this->vimeo = new VimeoManager();
}
/** @test */
public function a_video_can_be_deleted()
{
$video = $this->vimeo->upload($fakeVideo);
// make http request to delete the video
$result = $this->vimeo->delete($video['id']);
$this->assertEquals('success', $result['status']);
}
}
答案 0 :(得分:2)
在我看来,测试包装不是您的责任。正在测试您对程序包的实现。您的示例直接测试包的VimeoManager
。我认为这不是您应该做什么。
向您的API路由发出上传视频的请求是您应该测试的内容。在此测试过程中,您不想将其上传到真实的Vimeo API,但您想对其进行模拟。
Laravel包含一个可以执行此操作的程序包,称为Mockery。您可以模拟类的方法以返回值,而无需执行初始逻辑。在这种情况下,您将模拟delete
的{{1}}方法。
Laravel还提供了所谓的Facades
,可以很容易地成为mocked。我可以看到这个软件包makes use of such facade。在这种情况下,您可以执行以下操作来测试是否可以执行您的删除请求。
VimeoManager
答案 1 :(得分:1)
好吧,您可以测试一下是否合适。我发现进行两种类型的测试很有用。
与“其他”(服务,系统等)交互的测试称为集成测试。这些功能不错,让人有所想法,但是与您正在在线交互的系统相关联,并非总是如此。
第二种类型的测试可以有几个不同的名称,但这并不是重点。第二种测试的重点是您可以“模拟”外部/内部依赖项,以确保您的代码所依赖的“内容”在线/表现出您想要的方式。模拟是指您操纵“事物”以某种方式做出响应。通常,这是通过某种框架或语言功能来完成的。这些类型的测试给您的代码带来了更大的负担,在我看来,计数更为重要。
答案 2 :(得分:0)
我通常反对将测试连接到的模拟服务器。 模拟服务器和使用模拟器的主要缺点是,API的实现可能会更改(例如,抛出异常/新状态代码或超时可能会更短),或者两个服务器版本之间的API之间可能不兼容。
我应该在测试时使用真正的Vimeo服务器吗?
如果有可能,请使用docker创建本地Vimeo服务器:) 您的测试将找出将来API中是否有变化