0

我在每次测试运行之前使用Liip\FunctionalTestBundleLiip\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');,无论请求哪个页面,测试都会失败。

为什么?

4

0 回答 0