我正在为Symfony2.0项目开发一些测试并使用PHPUnit运行它们。PHPUnit 3.7.19和Symfony2破解测试
在我的电脑上工作正常,但在其他环境中尝试失败。我认为问题是PHP版本,但在不同的环境中运行后,我迷路了。
我的环境是Ubuntu 12.04和PHP 5.3.10 =>工作正常。
2 PC与Ubuntu 12.10和PHP 5.4.6:
Fatal error: Call to a member function get() on a non-object
此错误是在其上延伸的Symfony \捆绑\ FrameworkBundle \测试\ WebTestCase其中被覆盖的一类setUp()和tearDown()方法。
public function setUp()
{
$this->client = static::createClient();
$this->client->followRedirects(true);
$crawler = $this->client->request('GET', '/admin/login');
$loginForm = $crawler->selectButton('save')->form(array(
'_username' => 'user',
'_password' => 'pass'
));
$this->client->submit($loginForm);
$this->container = $this->client->getContainer();
parent::setUp();
}
public function tearDown()
{
//Here is get() on a non-object, $this->container doesn't exists
$this->container->get('doctrine.odm.mongodb.document_manager')->getConnection()->close();
parent::tearDown();
}
2 PC,一个与Ubuntu 12.10和PHP 5.4.6和其他与Windows 7和PHP 5.3.8:
PHP Fatal error: Call to a member function getSite() on a non-object
此错误是一类扩展了具有tearDown()方法的上述类,但在这种情况下,该类运行并且错误不同,但与$ this-> container有关:
//In this case, the user doesn't exists
$site = $this->container->get('security.context')
->getToken()->getUser()->getSite();
问题是我不知道这是为什么。如果这与PHP相关,PHPUnit(我们所有人都有相同的版本),Symfony2.0或SO。
编辑:
好了,解决的问题。
第一:
Fatal error: Call to a member function get() on a non-object
具有代码错线在具有设置()和tearDown()方法的类。一条这样的线:
$link = $crawler->filter('a:contains("Test")')->eq(1)->link();
我有这条线评论,对不起:)。但我不知道为什么PHPUnit向我显示这个错误,而不是链接方法的错误。
二:
PHP Fatal error: Call to a member function getSite() on a non-object
在其他环境中,测试数据库尚未部署。
这个问题不会帮助任何人,但帮助我尝试新事物。谢谢!
尝试检查$ this-> container是否在parent :: setUp()之前有某些内容。也许在parent :: setUp()上做了一些事情,并清理$ this-> container。它也是检查$ this-> client-getContainer()是否带来了一些东西。 – 2013-05-10 09:13:06
我删除了父:: setUp()和错误是一样的。容器始终存在于我的电脑上。在上面的例子中,容器不存在于tearDown()方法中。 – Biruwon 2013-05-10 10:47:49
运行app/check.php来验证您的环境是否正确配置以运行Symfony。 – 2013-05-10 10:58:10