使用 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"
显然这有点做作,但确实表明我打算做的是可能的。
我正在构建一个多租户 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"
显然这有点做作,但确实表明我打算做的是可能的。