7

BehatをBDDテストに使用しようとしています。Jenkinsでビルドを実行する場合、BehatでPHPのビルドをWebサーバーで開き、テストの実行後に閉じてください。どうやってするか?

基本的に私は実行する必要があります:

php -S localhost:8000

私のBDDテストでは、次のことを試しました。

/**
 * @Given /^I call "([^"]*)" with email and password$/
 */
public function iCallWithPostData($uri)
{
    echo exec('php -S localhost:8000');
    $client = new Guzzle\Service\Client();
    $request = $client->post('http://localhost:8000' . $uri, array(), '{"email":"a","password":"a"}')->send();
    $this->response = $request->getBody(true);
}

しかし、Behatを実行すると、メッセージなしでスタックします。

4

2 に答える 2

4

ビルドプロセスの一部としてサーバーを起動するだけです。behatが実行される前にサーバーを起動し、behatが終了するとサーバーを強制終了するantタスクを作成します。

私はこのアプローチを使用して、セレンサーバーを起動および停止してきました。

于 2012-10-26T11:04:10.913 に答える
4

これを自分で解決しました。2つのメソッドを作成しました。BDDテストを実行する前に最初の呼び出しを行い、テストを実行した後に2番目の呼び出しを行います。

private function _startDevelopmentServer($pidfile)
{
    $cmd = 'cd ../../public && php -S 127.0.0.1:8027 index.php';
    $outputfile = '/dev/null';
    shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
    sleep(1);
}

private function _killDevelopmentServer($pidfile)
{
    if (file_exists($pidfile)) {
        $pids = file($pidfile);
        foreach ($pids as $pid) {
            shell_exec('kill -9 ' . $pid);
        }
        unlink($pidfile);
    }
}
于 2012-10-30T11:21:48.903 に答える