Behat 3 和 Mink Extension 在 FeatureContext 中出现 Ubuntu 错误
Behat 3 and Mink Extension on Ubuntu error in FeatureContext
取决于我的 FeatureContext
class 是否扩展 RawMinkContext
或 MinkContext
我遇到问题 运行ning Behat 测试。
这是我的 FeatureContext.php
<?php
use Behat\Behat\Context\ClosuredContextInterface;
use Behat\Behat\Context\TranslatedContextInterface;
use Behat\Behat\Context\Context;
use Behat\Behat\Context\BehatContext;
use Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\MinkExtension\Context\MinkContext;
use Behat\MinkExtension\Context\RawMinkContext;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Mink\Driver\Selenium2Driver;
use Behat\Behat\Hook\Scope\AfterStepScope;
use Goutte\Client;
class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext {
/**
* Initializes context.
* Every scenario gets its own context object.
*
* @since 1.0.0
*
* @param array $parameters context parameters (set them up through behat.yml)
* @return null
*/
public function __construct() {
}/* __construct() */
}
?>
和我的behat.yml
default:
suites:
default:
path: %paths.base%/features
contexts:
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
- Behat\MinkExtension\Context\RawMinkContext
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: 'http://somesite.com'
goutte: ~
javascript_session: selenium2
files_path: 'vendor'
selenium2: ~
sessions:
default:
goutte: ~
goutte:
goutte: ~
selenium2:
selenium2: ~
symfony2:
symfony2: ~
formatters:
html:
output_path: %paths.base%/reports
PHP Fatal error: Call to a member function getSession() on a non-object in /home/behat/composer/vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php on line 101
如果我 extend
RawMinkContext
而不是 MinkContext
那么测试 运行,但它添加了(空白)版本的默认步骤,这些步骤在 MinkContext 中定义(即如果我在 [url] 或当我去 [url] 等)。
如果我 运行 behat -c ./config/behat.yml
(或者只是 ./behat.yml
- 我在两个位置都有一个相同的 behat.yml 文件,因为我不确定它是否被使用正确)我得到与上面相同的结果。我几乎肯定在做一些愚蠢的事情...
我的composer.json
供参考:
{
"name": "behat mink skeleton",
"require": {
"behat/behat": "*",
"behat/mink-extension": "*",
"behat/mink-browserkit-driver": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*",
"bossa/phpspec2-expect": "*",
"teaandcode/behat-guzzle-extension": "*",
"sauce/sausage": ">=0.5",
"sauce/connect": ">=3.0",
"emuse/behat-html-formatter": "dev-master"
},
"minimum-stability": "dev",
"config": {
"bin-dir": "bin/",
"github-oauth": {
"github.com": "ac1dd3678488663ccc1ba02a5d1d474e1a78bb93"
}
}
}
如果您在 FeatureContext 中扩展 MinkContext,则从 behat.yml 中删除 MinkContext。
behat.yml 文件应仅包含上下文部分下的本地上下文,在您的情况下,您不需要 MinkContext 或 RawAwareContext,只需要 FeatureContext。
取决于我的 FeatureContext
class 是否扩展 RawMinkContext
或 MinkContext
我遇到问题 运行ning Behat 测试。
这是我的 FeatureContext.php
<?php
use Behat\Behat\Context\ClosuredContextInterface;
use Behat\Behat\Context\TranslatedContextInterface;
use Behat\Behat\Context\Context;
use Behat\Behat\Context\BehatContext;
use Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
use Behat\MinkExtension\Context\MinkContext;
use Behat\MinkExtension\Context\RawMinkContext;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Mink\Driver\Selenium2Driver;
use Behat\Behat\Hook\Scope\AfterStepScope;
use Goutte\Client;
class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext {
/**
* Initializes context.
* Every scenario gets its own context object.
*
* @since 1.0.0
*
* @param array $parameters context parameters (set them up through behat.yml)
* @return null
*/
public function __construct() {
}/* __construct() */
}
?>
和我的behat.yml
default:
suites:
default:
path: %paths.base%/features
contexts:
- FeatureContext
- Behat\MinkExtension\Context\MinkContext
- Behat\MinkExtension\Context\RawMinkContext
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: 'http://somesite.com'
goutte: ~
javascript_session: selenium2
files_path: 'vendor'
selenium2: ~
sessions:
default:
goutte: ~
goutte:
goutte: ~
selenium2:
selenium2: ~
symfony2:
symfony2: ~
formatters:
html:
output_path: %paths.base%/reports
PHP Fatal error: Call to a member function getSession() on a non-object in /home/behat/composer/vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php on line 101
如果我 extend
RawMinkContext
而不是 MinkContext
那么测试 运行,但它添加了(空白)版本的默认步骤,这些步骤在 MinkContext 中定义(即如果我在 [url] 或当我去 [url] 等)。
如果我 运行 behat -c ./config/behat.yml
(或者只是 ./behat.yml
- 我在两个位置都有一个相同的 behat.yml 文件,因为我不确定它是否被使用正确)我得到与上面相同的结果。我几乎肯定在做一些愚蠢的事情...
我的composer.json
供参考:
{
"name": "behat mink skeleton",
"require": {
"behat/behat": "*",
"behat/mink-extension": "*",
"behat/mink-browserkit-driver": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*",
"bossa/phpspec2-expect": "*",
"teaandcode/behat-guzzle-extension": "*",
"sauce/sausage": ">=0.5",
"sauce/connect": ">=3.0",
"emuse/behat-html-formatter": "dev-master"
},
"minimum-stability": "dev",
"config": {
"bin-dir": "bin/",
"github-oauth": {
"github.com": "ac1dd3678488663ccc1ba02a5d1d474e1a78bb93"
}
}
}
如果您在 FeatureContext 中扩展 MinkContext,则从 behat.yml 中删除 MinkContext。 behat.yml 文件应仅包含上下文部分下的本地上下文,在您的情况下,您不需要 MinkContext 或 RawAwareContext,只需要 FeatureContext。