我在每次测试运行之前使用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()
);
}
}
一场比赛需要一定数量的积分。测试断言,进入游戏后,用户的积分比进入前少。
如果删除 line $client->request('GET', '/');
,则测试通过。如果不是,则测试失败并显示消息
$userPointsAtStart=42 $testUser->getPoints()=42
Failed asserting that false is true.
只要$client->request()
之前有另一个调用$client->request('GET', '/game/2/enter');
,无论请求哪个页面,测试都会失败。
为什么?