Тестирование приложений Laravel для нескольких арендаторов с использованием расширения Behat/Mink и Behat Laravel
Я создаю многопользовательское приложение SaaS, для которого пытаюсь написать тесты с помощью Behat, используя Mink и расширение Behat Laravel
Когда вы регистрируете учетную запись, вы получаете свой собственный поддомен на сайте {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.
3 answers
Конфигурация 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 , что особенно полезно, например, если вы не можете получить доступ к файлу /etc/hosts на сервере CI.
Для маршрутизации {account}.tenancy.dev
на ваш локальный веб-сервер вы можете использовать account.tenancy.dev.127.0.0.1.xip.io
, значение которого равно 127.0.0.1.
Через некоторое время я вернулся к этой проблеме и нашел довольно простое решение, которое можно использовать в моем 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"
Очевидно, что это немного надуманно, но показывает, что то, что я намеревался сделать, возможно.