如何设置 laravel 测试以转到站点名称而不是 localhost

Posted

技术标签:

【中文标题】如何设置 laravel 测试以转到站点名称而不是 localhost【英文标题】:How do I set laravel test to go to site name instead of localhost 【发布时间】:2016-02-06 11:42:43 【问题描述】:

我正在尝试为应用程序编写一些测试。我在 MAMP 上设置了服务器,将访问 dev.myappnamehere.com。

当我运行测试时(基于 Laracasts Integrated)它失败了,因为它正在寻找路线

 http://localhost/p/profile

但它需要去的是

 http://dev.myappnamehere/p/profile

我怎样才能改变它,使它不默认寻找本地主机,而是转到正确的路径?

我试图在测试中更改这一点,但没有成功,我无法通过谷歌搜索找到答案。

 <?php

 use Laracasts\Integrated\Extensions\Laravel as IntegrationTest;
 use Laracests\TestDummy\Factory as TestDummy;

 class ExampleTest extends TestCase 

/**
 * A basic functional test example.
 *
 * @return void
 */
public function testBasicExample()

    $this->visit('/')
    ->see('Login')
        ->type('example@example.com', 'email')
        ->type('password', 'password')
        ->press('Login')
        ->seePageIs('/p/profile');
  


【问题讨论】:

发布你的phpunit测试代码? 您是否将config/app.php 中的config.url 设置为http://dev.myappnamehere 其实我刚刚解决了。在 LaravelTestCase.php 中有一个 baseUrl,一旦我改变了测试在正确的位置查看 【参考方案1】:

从 Laravel 5.4 开始,$baseUrl 方法似乎不再起作用了

此外,尝试使用 \Config:set('app.url', 'http://dev.myappnamehere') 动态设置 url 也不起作用,因为 Laravel 似乎缓存了根 url

设置自定义根 url 的一种方法是:

\URL::forceRootUrl('http://dev.myappnamehere');

【讨论】:

URL::forceRootUrl 节省了我在 Laravel 中使用 phpunit 和 Ngrok 调试 webhook 的时间!【参考方案2】:

所以在我询问后不久,我偶然发现了答案。在

 LaravelTestCase.php 

有个函数叫

  baseUrl() 

设置它要查找的 url。一旦我改变它,它就会出现在正确的位置。该文件是我加载的 laracast 测试的一部分。

【讨论】:

你不需要更改 LaravelTestCase.php。就像@Dallin 说的,只需替换 $baseUrl。 @alvaropaco 抱歉,也许不清楚,但这就是我的回答,更改 baseUrl()【参考方案3】:

对于 Laravel 5, 在tests 目录中应该有一个名为TestCase.php 的文件。在该文件中有一个属性$baseUrl。将值更新为所需的 url。比如改变

protected $baseUrl = 'http://localhost';

protected $baseUrl = 'http://dev.myappnamehere';

【讨论】:

【参考方案4】:

您很可能需要更改现有request() 中的域根目录。

$domain = 'homestead.test';
request()->headers->set('HOST', $domain);

测试

\Log::debug(request()->root());

http://homestead.test

【讨论】:

【参考方案5】:

将 .env 文件中的 APP_URL 从 localhost 更改为所需的 URL。

例如: APP_URL=http://myproject.test

【讨论】:

【参考方案6】:

改为下面

$this->visit('http://dev.myappnamehere')

【讨论】:

以上是关于如何设置 laravel 测试以转到站点名称而不是 localhost的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:使用名称中的变量创建表

在选择选项 laravel 上保存名称值而不是 id

Laravel 测试 - 该名称已被使用

PHPUnit 测试使用 XAMPP localhost 而不是 laravel artisan serve

ASP.NET 应用程序 - Webfonts 在用户登录到站点之前不会加载

Python写地铁的到站的原理简易版