使用 Behat / Mink 和 Behat Laravel Extension 测试多租户 Laravel 应用程序

Testing multi-tenancy Laravel applications using Behat / Mink and Behat Laravel Extension

我正在构建一个多租户 SaaS 应用程序,我正在尝试使用 Mink 和 Behat Laravel Extension

为 Behat 编写测试

注册帐户后,您会在网站上获得自己的子域 {account}.tenancy.dev

我的 behat.yml 文件如下所示:

default:
    extensions:
        Laracasts\Behat:
            # env_path: .env.behat
        Behat\MinkExtension:
            default_session: laravel
            base_url: http://tenancy.dev
            laravel: ~

我一开始就遇到了问题,因为当我尝试测试我的注册流程时,我收到一个 404 错误测试,表明新的子域可以访问,所有数据都已正确保存,手动测试过程有效,子域路由有效。

我想知道是否有任何方法可以使用 Behat 来执行此操作,以及我将如何设置 Behat / Mink 以使用通配符子域来测试 SaaS 应用程序?

我是运行Homestead VM里面的测试

base_url: http://tenancy.dev 配置用于在您使用相对路径 URL 时生成完全合格的域 URL 在您的 mink 步骤(即“/home”)中。

当您想要访问与 base_url 中指定的域不同的域时,您所要做的就是在您的步骤中使用完全限定的域 URL,例如“http://test.tenancy.dev/fully/qualified ”。

因此,请使用 base_url 配置将您将在大部分步骤中使用的内容设置为相对 url,然后明确指定例外的完整域。

When I create an account named foo And GET "http://foo.tenancy.dev/ping" Then I get a 200 response code When I GET "/home" Then the response contains "Sign Up"

如果您的大部分测试将针对子域,请将其设置为您的 base_url 并在必要时明确指定您的顶级域。

您可以使用 xip.io 解析子域,例如,如果您无法访问 CI 服务器上的 /etc/hosts 文件,这将特别有用。

要将 {account}.tenancy.dev 路由到您的本地网络服务器,您可以使用解析为 127.0.0.1 的 account.tenancy.dev.127.0.0.1.xip.io

过了一会儿,我重新审视了这个问题,发现了一个相当简单的解决方案,可用于我的 FeatureContext.php:

$this->setMinkParameter('base_url', $url);

这会更改基础 url 用于任何场景:

/**
 * @Given I visit the url :url
 */
public function visitDomain($url)
{
    $this->setMinkParameter('base_url', $url);
    $this->visit('/');
}

使用方法如下:

Scenario: Test Multi Tenancy
  Given I have a business "mttest"
  When I visit the url "http://mttest.example.com"
  Then I should see "mttest"

显然这有点做作,但确实表明我打算做的是可能的。