Pass variable to PhpUnit

前端 未结 3 1972
旧巷少年郎
旧巷少年郎 2020-12-17 22:16

I developed a set of test cases using phpunit used for testing both development site and the production site. The only difference is the domain name. How can I pass the doma

相关标签:
3条回答
  • 2020-12-17 22:58

    In your phpunit-bootstrap.php you can do something like this:

    $site = getenv('DOMAIN');
    

    and use

    <php>
      <env name="DOMAIN" value="http://production.com"/>
    </php>
    

    in your phpunit.xml file as shown in the documentation.

    The downside of this approach is that you need to have two different xml files.


    Other options are using a custom wrapper script around phpunit like @DavidHarkness showed which tends to work out well

    or, if you don't want to run those tests in an automated way (or use both approaches) to do something like:

    $site = getenv('DOMAIN');
    if(!$site) {
        echo "Enter Domain: ";
        $site = fgets(STDIN);
    }
    

    and have the runner check the environment and if nothing is there ask you for the domain.


    Env or define or anything else

    The same goes for pretty much every way that php can take in input from the outside world.

    <php>
      <define name="DOMAIN" value="http://production.com"/>
    </php>
    

    also works in case you are using a constant anyways, for example.

    0 讨论(0)
  • 2020-12-17 22:58

    I ran into this too. One way you can do this with bash is to export the ENV variables you want to pass in and chain the phpunit call using ; like so:

    #: HOST_NAME="my.host.com"; phpunit MyTestFile.php
    

    That will create a HOST_NAME environment variable and then immediately call your unit test.

    Then within your test script you can access the HOST_NAME variable using something like:

    $host = getenv('HOST_NAME');
    
    0 讨论(0)
  • 2020-12-17 23:05

    You could set an environment variable before running the tests. To make this easier on yourself, create a simple script to export the variable and run the tests.

    #!/bin/bash
    
    USAGE="Usage: $0 <domain> [file-or-directory]"
    
    if [ "$#" == "0" ]; then
        echo "$USAGE"
        exit 1
    fi
    
    export TEST_DOMAIN=$1
    shift
    phpunit $*
    

    In your base test case you can access this value using getenv:

    $domain = getenv('TEST_DOMAIN');
    
    0 讨论(0)
提交回复
热议问题