Тестирование приложений 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.

Author: Andrew Willis, 2015-04-24

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 и при необходимости явно укажите свой домен верхнего уровня.

 0
Author: Jeremy Giberson, 2015-04-27 23:07:07

Вы можете разрешить поддомены с помощью xip.io , что особенно полезно, например, если вы не можете получить доступ к файлу /etc/hosts на сервере CI.

Для маршрутизации {account}.tenancy.dev на ваш локальный веб-сервер вы можете использовать account.tenancy.dev.127.0.0.1.xip.io, значение которого равно 127.0.0.1.

 0
Author: Fabian Keller, 2015-05-03 11:30:29

Через некоторое время я вернулся к этой проблеме и нашел довольно простое решение, которое можно использовать в моем 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"

Очевидно, что это немного надуманно, но показывает, что то, что я намеревался сделать, возможно.

 0
Author: Andrew Willis, 2015-08-01 00:43:41