Pat*_*der 6 php testing unit-testing symfony
// src/Acme/DemoBundle/Tests/Controller/DemoControllerTest.php
namespace Acme\DemoBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class DemoControllerTest extends WebTestCase
{
public function testIndex()
{
$client = static::createClient();
$crawler = $client->request('GET', '/demo/hello/Fabien');
$this->assertGreaterThan(0, $crawler->filter('html:contains("Hello Fabien")')->count());
}
}
Run Code Online (Sandbox Code Playgroud)
这在我的测试中工作正常,但我想在控制器中也使用这个爬虫.我该怎么做?
我做路线,并添加到控制器:
<?php
// src/Ens/JobeetBundle/Controller/CategoryController
namespace Acme\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Acme\DemoBundle\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class CategoryController extends Controller
{
public function testAction()
{
$client = WebTestCase::createClient();
$crawler = $client->request('GET', '/category/index');
}
}
Run Code Online (Sandbox Code Playgroud)
但这会给我带来错误:
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /acme/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Test/WebTestCase.php on line 24
Run Code Online (Sandbox Code Playgroud)
WebTestCase 类是一个特殊的类,设计为在测试框架 (PHPUnit) 中运行,并且您不能在控制器中使用它。
但是你可以像这样创建一个 HTTPKernel 客户端:
use Symfony\Component\HttpKernel\Client;
...
public function testAction()
{
$client = new Client($this->get('kernel'));
$crawler = $client->request('GET', '/category/index');
}
Run Code Online (Sandbox Code Playgroud)
请注意,您只能使用此客户端浏览您自己的 symfony 应用程序。如果您想浏览外部服务器,您将需要使用另一个客户端,例如 goutte。
此处创建的爬虫与 WebTestCase 返回的爬虫相同,因此您可以遵循 symfony测试文档中详细说明的相同示例
归档时间: |
|
查看次数: |
1922 次 |
最近记录: |