PhpUnit 无法访问外部 url
Posted
技术标签:
【中文标题】PhpUnit 无法访问外部 url【英文标题】:PhpUnit unable to access external url 【发布时间】:2016-08-01 02:29:36 【问题描述】:在我的本地 Windows PC 上,我正在运行 XAMPP,它正在提供一个测试页(例如 http://localhost/testsite/testpage.html
)
现在在同一台机器上,我运行了一个 laravel 5.2 实例,其中有一个名为 testroute
的命名路由。
我写了一个phpunit测试用例
public function testBasicExample1()
$this->visit('testroute')->see('Something'); //Passes
public function testBasicExample2()
$this->visit('http://www.google.com')->see('Google'); //Passes
public function testBasicExample3()
$this->visit('http://localhost/testsite/testpage.html')->see('Something Else');
//Fails as it is unable to reach the desired page (Received status code [404])
在 TestCase.php 中
$baseUrl = 'http://localhost:8000';
在.env APP_URL=http://localhost:8000
知不知道phpunit中无法访问localhost站点?
更新:
我发现即使http://www.google.com 也不起作用,它正在重定向到 laravel 的欢迎路线。 (测试通过,因为该页面中也有文本“Google”)。基本上它试图评估http://localhost:8000/www.google.com 并重定向到欢迎页面。
我不确定如何在 laravel 的 phpunit 中访问外部 url。
【问题讨论】:
你试过$this->visit('http://localhost:8000/testsite/testpage.html')
吗?
这对我没有在 localhost:8000 上运行的测试站点有何帮助?我在 localhost:80 即 xampp 上运行测试站点。顺便说一句,我测试过,它不起作用。
【参考方案1】:
我用这个把头撞在墙上很长一段时间。我不相信使用 Laravel click() 或 visit() 方法测试外部站点是可能的/功能性的。如果是,我没看到。
虽然我的需要只是检查我的所有链接,但也许这个 hack 可能对你有所帮助。我回到基本的 php 来断言正确返回的站点。
$sites = \App\Website::pluck('website');
foreach($sites as $site)
$file_headers = @get_headers($site);
if (strpos($file_headers[0], '404 Not Found') || $file_headers[0] == null)
$exists = false;
echo " Failed on: ".$site." ";
else
$exists = true;
$this->assertTrue($exists);
它并不能完全让你得到你想要的东西(看到一些东西),但对我来说,能够看到链接是有效的并且成功的就足够了。
测试速度很慢,因为它要发送到 x # 个站点。
HTH
【讨论】:
以上是关于PhpUnit 无法访问外部 url的主要内容,如果未能解决你的问题,请参考以下文章