我现在正在努力解决代码问题。 我参与了一个laravel 4项目。从现在开始,我们使用PhpUnit进行单向测试,但是我们的页面中有太多的Javascript用简单的DomCrawler进行验收测试,这是没有意义的。 首先,我在流浪汉VM上安装了selenium + chrome。花了我一些时间,但我设法让它工作,这意味着我可以浏览Webdriver网页(/ wd / hub),然后使用chrome成功创建一个新的会话。
接下来我通过composer安装了代码 我做了
codecept bootstrap
我将Laravel4作为模块添加到acceptance.suite.yml
class_name: AcceptanceTester
modules:
enabled:
- WebDriver
- AcceptanceHelper
- Laravel4
config:
WebDriver:
url: 'https://192.168.33.10/'
browser: 'chrome'
我做了一个codecept构建。 然后我写了一个非常简单的acceptanceTest来检查一切是否有效:
$I = new AcceptanceTester($scenario);
$I->am('a member');
$I->wantTo('connect');
$I->amOnRoute('login');
$I->see('someText');
当我执行codecept运行时,它会在屏幕上引发错误:
[LogicException] 在迭代Finder之前,必须调用in()或append()方法之一。
在Selenium WebDriver页面中,它表示已创建了一个chrome会话。
我对这个错误进行了一些搜索。它来自Symfony的Finder组件。
有人可以帮助我吗?
答案 0 :(得分:6)
你必须选择是否要将WebDriver或Laravel4作为“浏览器”,遗憾的是你不能同时拥有这两者,这可能是你问题的根源。如果你需要Javascript,你可能需要保留WebDriver并放弃一些Laravel功能,但在我看来并不多。如果你真的需要Laravel,这是我创建的帮助器,以便将它放在_support / FunctionalHelper中:
public function getLaravel4()
{
if ( ! isset($this->laravel4))
{
$this->laravel4 = (new \Codeception\Module\Laravel4());
$this->laravel4->kernel = app();
}
return $this->laravel4;
}
所以在你的测试中你只需要:
$L = $I->getLaravel4();
但是,请记住,因为Laravel不是您的浏览器,例如:
$L->amOnRoute('login');
无法使用,但您可以执行与浏览无关的操作,例如:
$L->seeRecord('users', [
'email' => 'a@b.com',
'first_name' => 'a',
'last_name' => 'b'
]);
此外,您可以在_bootstrap文件上启动laravel:
include __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/start.php';
$app->boot();
可以直接访问IoC容器:
$app = app();
$app['config']->get('...');
甚至外墙:
DB::table('users')->...