0

我显然错过了一些非常明显的东西,但这让我发疯:

为了测试我的代码,我需要将我的实体置于已定义的状态。它根本行不通。它完全忽略了我所做的任何更改,例如这个:

    $this->test_character->setLocation(null);

    $crawler = $this->client->request('GET', '/en/character/start');
    $this->assertTrue($this->client->getResponse()->isSuccessful(), "start page failed to load");
    $this->assertGreaterThan(0, $crawler->filter('html:contains("Character Placement")')->count(), 'start page content failure');

调试这个测试表明它失败了,因为 Location 实际上没有设置为 null。添加一个 flush() 不会改变任何东西,所以这不是问题。我最好的猜测是它仅在测试客户端上更改它,而不是在生成页面的后端上更改它,但留下了一个问题:我如何将我的实体置于定义的状态以测试它们?

4

1 回答 1

1

你在正确的路线上 - 处理你的测试请求的内核是你的应用程序的一个独立实例。除非您在发出请求之前将其持久化并将其刷新到数据库中,否则它将无法访问您可能已加载到 test_character 中的实体。

您是否考虑过使用Fixtures?如果您所做的只是初始化一些准备测试请求/响应的实体,那么这是正确的方法。您永远不需要在功能测试中直接使用实体。

您可能还想查看Liip 功能测试包以自动设置您的测试数据库和测试装置。

于 2013-02-18T15:13:45.107 回答