8000 How to change the environment the website runs in? · Issue #68 · symfony/panther · GitHub
[go: up one dir, main page]

Skip to content

How to change the environment the website runs in? #68

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ChangePlaces opened this issue Jul 26, 2018 · 15 comments
Open

How to change the environment the website runs in? #68

ChangePlaces opened this issue Jul 26, 2018 · 15 comments

Comments

@ChangePlaces
Copy link
Contributor
ChangePlaces commented Jul 26, 2018

When working with panther tests, the website seems to be running with dev mode config, even though if I dd(getenv('APP_ENV')) it reports it's in 'test' environment. This causes lots of problems when testing because of the web profiler toolbar overlay preventing buttons from being clicked.

The toolbar is disabled for the test env per the config, and the only way to prevent the toolbar from showing is by editing the config/dev/web_profiler and set toolbar:false. Something I shouldn't have to do as I'm in the test environment

Why is this crazy behaviour happening?

@Kocal
Copy link
Member
Kocal commented Aug 9, 2018

Agreed, that would be nice to change the environment.

One of my usage case is to disable translations in test env, so we can check translations keys instead of translated strings.

@pierre-moire
8000 Copy link

I have exactly the same issue ; no matter how I try to set the env, it always use dev.

I tried to set it in :

  • .env file
  • phpunit xml file
  • in the Dockerfile as env param
  • in the docker command line when running the test

@ChangePlaces
Copy link
Contributor Author

i don't use panther now (I didn't like how it squeezes selenium / web driver into an unsuitable interface), but I think the solution would be to modify the code to not use the php server for its requests, but your actual server e.g. nginx / apache

@pierre-moire
Copy link

I noticed that during the tests the server runs with -t public option and when we launch it manually it has vendor/symfony/web-server-bundle/Resources/router.php (without -t) provided we have the web server bundle.

I could make it work by :

  • forcing the argument to vendor/symfony/web-server-bundle/Resources/router.php in vendor/symfony/panther/src/ProcessManager/WebServerManager.php

image

  • Adding a $_SERVER = array_merge($_SERVER, $_ENV); before the return is made in vendor/symfony/web-server-bundle/Resources/router.php

image

After that the APP_ENV environment var is correctly used

@Pierstoval
Copy link
Contributor

I'm having struggles too because on my app, web test case is using the env vars from the phpunit.xml.dist, but Panther test have a different configuration and I need an additional env.

For this, I just change APP_ENV from test to panther in the test case by overriding setUpBeforeClass() and tearDownAfterClass() methods.

But, what I see is that the env, even if it's overriden, it is not correctly populated in the PHP web server.

When I dump($_SERVER, $_ENV); in public/index.php, I see that $_ENV['APP_ENV'] exists, but *not $_SERVER['APP_ENV'], so it will still load the .env file, which is not what I need at all.

I think we definitely need a proper way to retrieve env vars in our projects instead of relying on $_SERVER all the time...

8000

@bastien70
Copy link
Contributor

Hello, have you since found a way to launch Panther with the Test environment? I have the same problem

@Pierstoval
Copy link
Contributor

@bastien70 There's one specific thing about using the test environment that is not the best option: session. Since Panther uses a web browser, you can't use Session, since it's mocked as an array in the memory, therefore the session is lost after every request.

The solution I had was to create a custom panther environment, create a services_panther.yaml in which I imported everything from the config/dev/ files and overrode the session parameters to use a native session handler instead of the mocked one.

Then, I made sure that every Panther test case use the panther environment name, and that's it.

@bastien70
Copy link
Contributor

@bastien70 There's one specific thing about using the test environment that is not the best option: session. Since Panther uses a web browser, you can't use Session, since it's mocked as an array in the memory, therefore the session is lost after every request.

The solution I had was to create a custom panther environment, create a services_panther.yaml in which I imported everything from the config/dev/ files and overrode the session parameters to use a native session handler instead of the mocked one.

Then, I made sure that every Panther test case use the panther environment name, and that's it.

Wow, I'm quite interested! Could you share an example of the code you use to do all of this? That interests me a lot

@Pierstoval
Copy link
Contributor

Hmm, it's on a private project, I can't share it now, I would need to create a reproducer somewhere, I'll look into it when I have time to focus on this subject 😉

@bastien70
Copy link
Contributor

Hmm, it's on a private project, I can't share it now, I would need to create a reproducer somewhere, I'll look into it when I have time to focus on this subject 😉

Okay good ! I can not wait to see it !

@Pierstoval
Copy link
Contributor

Tiny bit of information though @bastien70 : are you using Panther inside a Docker container?

@bastien70
Copy link
Contributor

Not at all @Pierstoval . To be honest, I am new to Symfony. I have never used Docker.

Right now all I can do with Panther is log a user by going to the login page and submitting the authentication information to be able to initiate the user's session. However, as said above, it relies on data in the dev environment which is problematic.

@Chris53897
Copy link

@bastien70

Then, I made sure that every Panther test case use the panther environment name, and that's it.
Can you please explain how to to this?

@Pierstoval
Copy link
Contributor

Can you please explain how to to this?

By creating a new environment, it can be pretty quick if you follow the official docs about creating new environments

@Chris53897
Copy link

@Pierstoval Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants
0