一貫したテスト設定を行うために、すべてのテスト実行の前にLiip\FunctionalTestBundle
とを使用してフィクスチャをロードしています。Liip\TestFixturesBundle
実行すると失敗するテストを次に示します。
<?php
namespace App\Tests\Controller;
use Liip\TestFixturesBundle\Test\FixturesTrait;
use App\Repository\UserRepository;
use Liip\FunctionalTestBundle\Test\WebTestCase;
class BetEnterTest extends WebTestCase
{
use FixturesTrait;
public function testUserEnteredBet(): void
{
$client = static::createClient();
$this->loadFixtures(array(
'App\DataFixtures\AppFixtures', // Fixtures where Users and Games are populated
));
$userRepository = static::$container->get(UserRepository::class);
// retrieve the test user
$testUser = $userRepository->findUserByUsername('john_user');
// simulate $testUser being logged in
$client->loginUser($testUser);
$userPointsAtStart = $testUser->getPoints();
$client->request('GET', '/'); // if you comment this line out, the test passes, otherwise it fails
$client->request('GET', '/game/2/enter'); // a user needs to pay points to enter a game
$this->assertTrue(
$testUser->getPoints() < $userPointsAtStart,
'$userPointsAtStart='.$userPointsAtStart.' $testUser->getPoints()='.$testUser->getPoints()
);
}
}
ゲームには一定数のポイントが必要です。このテストは、ゲームに参加した後、ユーザーが参加する前よりも少ないポイントを持っていることを表明します。
行を削除する$client->request('GET', '/');
と、テストに合格します。そうでない場合、テストは失敗し、メッセージが表示されます
$userPointsAtStart=42 $testUser->getPoints()=42
Failed asserting that false is true.
$client->request()
の前に別の呼び出しがある限り、$client->request('GET', '/game/2/enter');
どのページが要求されても、テストは失敗します。
なんで?