我想编写 Behat/Mink 场景来检查某些用户帐户是否可以下载大文件。我可以使用该When I follow "largefile.zip"
事件,但这似乎会下载整个文件。
我不想浪费时间和资源流式传输大文件,我想(例如)只检查 HTTPHEAD
请求的结果,或者只是尝试使用 HTTP 请求开始下载文件,GET
然后立即取消它并检查the response status code
.
我怎么能用 Behat/Mink 做到这一点?
我想编写 Behat/Mink 场景来检查某些用户帐户是否可以下载大文件。我可以使用该When I follow "largefile.zip"
事件,但这似乎会下载整个文件。
我不想浪费时间和资源流式传输大文件,我想(例如)只检查 HTTPHEAD
请求的结果,或者只是尝试使用 HTTP 请求开始下载文件,GET
然后立即取消它并检查the response status code
.
我怎么能用 Behat/Mink 做到这一点?
我同意@NathanStretch 关于扩展的看法,所以这就是我所做的。
此示例基于使用http://download.thinkbroadband.com/5MB.zip作为下载 url。不完美,因为我没有在响应标头中看到文件名,但它确实有内容长度。
<?php
class DownloadContext extends Behat\MinkExtension\Context\RawMinkContext {
private $headers = [];
/**
* @When /^I try to download "([^"]*)"$/
*/
public function iTryToDownload($url)
{
$this->headers = get_headers($url);
}
/**
* @Then /^I should see in the header "([^"]*)"$/
*/
public function iShouldSeeInTheHeader($header)
{
assert(in_array($header, $this->headers), "Did not see \"$header\" in the headers.");
}
}
使用具有以下内容的 .feature 文件:
Scenario: Try to download a file
When I try to download "http://download.thinkbroadband.com/5MB.zip"
Then I should see in the header "Content-Length: 5242880"
如果您可以自己控制下载,那么您可以在标题中设置文件名并检查它而不是大小。如果大小可以变化当然更好,因为我认为这意味着必须拆分内容长度字符串,转换为 int然后进行比较。啊。可能有一个更优雅的解决方案。
希望能有所帮助。