2

I've got a custom module and have the auto generated LoadTest but it is not working. This is a functional test.

  protected function setUp() {
    parent::setUp();
    $this->user = $this->drupalCreateUser(['administer site configuration']);
    $this->drupalLogin($this->user); // Breaks here
  }

  public function testLoad() {
    $this->drupalGet(Url::fromRoute('<front>'));
    $this->assertSession()->statusCodeEquals(200);
  }

Running this test returns :

1) Drupal\Tests\weekly_digest\Functional\LoadTest::testLoad
User <em class="placeholder">belwfS3e</em> successfully logged in.
Failed asserting that false is true.

/app/web/core/tests/Drupal/TestTools/PhpUnitCompatibility/PhpUnit7/TestCompatibilityTrait.php:18
/app/web/core/tests/Drupal/Tests/UiHelperTrait.php:254
/app/web/modules/custom/weekly_digest/tests/src/Functional/LoadTest.php:35

When I comment out the drupalLogin call the test succeeds.

The fail is on this line

$this->assertTrue($this->drupalUserIsLoggedIn($account), new FormattableMarkup('User %name successfully logged in.', ['%name' => $account->getAccountName()]));

And if you look at the error from above it's from the TestCompatibilityTrait which had some pretty wacky deprecation errors.

Here is my phpunit env

    <!-- Set error reporting to E_ALL. -->
    <ini name="error_reporting" value="32767"/>
    <!-- Do not limit the amount of memory tests take to run. -->
    <ini name="memory_limit" value="-1"/>

    <env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled"/>

    <env name="SIMPLETEST_BASE_URL" value="http://changelog.lndo.site/"/>
    <env name="SIMPLETEST_DB" value="mysql://drupal8:drupal8@database/drupal8"/>

    <env name="BROWSERTEST_OUTPUT_DIRECTORY" value="web/sites/simpletest/browser_output"/>
    <env name="BROWSERTEST_OUTPUT_BASE_URL" value=""/>

    <!-- Example for changing the driver class for mink tests MINK_DRIVER_CLASS value: 'Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver' -->
    <env name="MINK_DRIVER_CLASS" value=''/>
    <!-- Example for changing the driver args to mink tests MINK_DRIVER_ARGS value: '["http://127.0.0.1:8510"]' -->
    <env name="MINK_DRIVER_ARGS" value=''/>
    <!-- Example for changing the driver args to phantomjs tests MINK_DRIVER_ARGS_PHANTOMJS value: '["http://127.0.0.1:8510"]' -->
    <env name="MINK_DRIVER_ARGS_PHANTOMJS" value=''/>
    <!-- Example for changing the driver args to webdriver tests MINK_DRIVER_ARGS_WEBDRIVER value: '["chrome", { "chromeOptions": { "w3c": false } }, "http://localhost:4444/wd/hub"]' For using the Firefox browser, replace "chrome" with "firefox" -->
    <env name="MINK_DRIVER_ARGS_WEBDRIVER" value=''/>

This is using lando.
Why would I be getting these failures? It accesses the site just fine, it seems to be checking if the user is logged in that's causing the issue but I can't find out why.

2
  • If you move the login to the actual test method instead of doing the login in setUp, does it do any difference for you?
    – johndevman
    Jun 2, 2020 at 8:24
  • 1
    @johndevman Nope, same thing happens.
    – Derek C.
    Jun 2, 2020 at 16:42

1 Answer 1

1

I ran into this same behaviour, and found that while the phpunit.xml had SIMPLETEST_BASE_URL set to my site URL locally, in the Lando appserver the environment variable was set to https://appserver_nginx.

Even setting SIMPLETEST_BASE_URL="http://appserver_nginx" in a Lando env_file directive didn't resolve this.

When I used lando ssh into the appserver container and executed phpunit web/modules/contrib/modulename, I saw the same error. If I set the environment variable manually using export SIMPLETEST_BASE_URL=http://appserver_nginx then ran the tests again, the login step worked.


The eventual solution I used, from here, was to modify phpunit.xml to contain this line:

    <env name="SIMPLETEST_BASE_URL" value="http://appserver_nginx" force="true"/>

And to execute PHPUnit in Lando with this tooling:

tooling:
  phpunit:
    service: appserver
    cmd: "php /app/vendor/bin/phpunit -c /app/phpunit.xml"

Related:

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.