我尝试使用各种工具将功能测试引入旧代码库,其中一个是Codeception(2.2.0)。验收测试通过basic log in scenario:
public function login($name, $password)
{
$I = $this;
$I->amOnPage('/login');
$I->submitForm('.loginform', array(
'_username' => $name,
'_password' => $password
));
$I->see('User', '.navbar');
}
然而,当我尝试对同一场景进行功能测试时,它失败了
[例外]环境实例已设置
查看堆栈跟踪,它来自正在注册实例的侦听器:
public function onKernelRequest() {
$this->getContainer()->get('environment');
}
导致config.yml中的服务:
environment:
class: MyApp\Environment
calls:
- [ setContainer, [ @service_container ] ]
指向班级:
class Environment {
public function __construct() {
self::setInstance($this);
}
public static function setInstance(Environment $environment) {
if (null !== self::$instance) {
throw new \Exception('environment instance is already set');
}
self::$instance = $environment;
}
我如何才能最好地了解如何通过功能测试删除错误?代码是反模式还是需要重构?或者我的Codeception配置有问题吗?
class_name: FunctionalTester
modules:
enabled:
- Symfony2:
app_path: 'app'
var_path: 'app'
- Doctrine2:
depends: Symfony2
- \Helper\Functional
- Asserts
- Sequence
如果您需要我在此处添加更多信息,请与我们联系。
更新
我找到this answer并通过从Symfony模块切换到PhpBrowser,测试通过了。但是,最初的问题 - 如何使用Symfony模块运行功能测试 - 仍然存在。