在第81行的vendor / behat / mink-extension / src / Behat / MinkExtension / Context / RawMinkContext.php中的非对象上调用成员函数getSession()

时间:2013-01-31 16:02:34

标签: php behat mink

尝试从命令行运行我的behat测试时出现此错误。

错误的完整输出如下所示:

$ behat                                       
Feature: View a list of current custom tariffs
    In order to provide custom call pricing to customers
    As a user of the Voxbeam Admin site
    I expect to be able to correctly administrate a users custom tariffs

  @sahi
  Scenario: Listing existing custom tariffs # features/custom_tariff_admin.feature:7
PHP Fatal error:  Call to a member function getSession() on a non-object in /Users/stuart/bin/vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php on line 81
PHP Stack trace:
PHP   1. {main}() /Users/stuart/bin/vendor/behat/behat/bin/behat:0
PHP   2. Symfony\Component\Console\Application->run() /Users/stuart/bin/vendor/behat/behat/bin/behat:32
PHP   3. Behat\Behat\Console\BehatApplication->doRun() /Users/stuart/bin/vendor/symfony/console/Symfony/Component/Console/Application.php:106
PHP   4. Symfony\Component\Console\Application->doRun() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Console/BehatApplication.php:68
PHP   5. Symfony\Component\Console\Command\Command->run() /Users/stuart/bin/vendor/symfony/console/Symfony/Component/Console/Application.php:193
PHP   6. Behat\Behat\Console\Command\BehatCommand->execute() /Users/stuart/bin/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:240
PHP   7. Behat\Behat\Console\Command\BehatCommand->runFeatures() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Console/Command/BehatCommand.php:128
PHP   8. Behat\Gherkin\Node\AbstractNode->accept() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Console/Command/BehatCommand.php:150
PHP   9. Behat\Behat\Tester\FeatureTester->visit() /Users/stuart/bin/vendor/behat/gherkin/src/Behat/Gherkin/Node/AbstractNode.php:42
PHP  10. Behat\Gherkin\Node\AbstractNode->accept() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/FeatureTester.php:88
PHP  11. Behat\Behat\Tester\ScenarioTester->visit() /Users/stuart/bin/vendor/behat/gherkin/src/Behat/Gherkin/Node/AbstractNode.php:42
PHP  12. Behat\Behat\Tester\ScenarioTester->visitStep() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/ScenarioTester.php:87
PHP  13. Behat\Gherkin\Node\AbstractNode->accept() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/ScenarioTester.php:148
PHP  14. Behat\Behat\Tester\StepTester->visit() /Users/stuart/bin/vendor/behat/gherkin/src/Behat/Gherkin/Node/AbstractNode.php:42
PHP  15. Behat\Behat\Tester\StepTester->executeStep() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/StepTester.php:95
PHP  16. Behat\Behat\Tester\StepTester->executeStepDefinition() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/StepTester.php:126
PHP  17. Behat\Behat\Definition\Annotation\Definition->run() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Tester/StepTester.php:157
PHP  18. call_user_func_array() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Definition/Annotation/Definition.php:155
PHP  19. Behat\MinkExtension\Context\MinkContext->visit() /Users/stuart/bin/vendor/behat/behat/src/Behat/Behat/Definition/Annotation/Definition.php:155
PHP  20. Behat\MinkExtension\Context\RawMinkContext->getSession() /Users/stuart/bin/vendor/behat/mink-extension/src/Behat/MinkExtension/Context/MinkContext.php:45

我的behat.yml是:

# behat.yml
default:
    paths:
        features: features
        bootstrap: %behat.paths.features%/bootstrap
    extensions:
        Behat\MinkExtension\Extension:
            base_url:  'http://dev.example.com'
            goutte: ~
            sahi: ~

annotations:
  paths:
    features: features/annotations

closures:
  paths:
    features: features/closures

我有一个非常简单的FeatureContext:

<?php

use Behat\Behat\Context\ClosuredContextInterface,
    Behat\Behat\Context\BehatContext,
    Behat\Behat\Exception\PendingException,
    Behat\Behat\Context\Step;

use Behat\Gherkin\Node\PyStringNode,
    Behat\Gherkin\Node\TableNode;

use Behat\MinkExtension\Context\MinkContext;

//
// Require 3rd-party libraries here:
//
//   require_once 'PHPUnit/Autoload.php';
//   require_once 'PHPUnit/Framework/Assert/Functions.php';
//

/**
 * Features context.
 */
class FeatureContext extends MinkContext
{
    /**
     * @Given /^I am logged in as "([^"]*)" with password "([^"]*)"$/
     */
    public function iAmLoggedInAsWithPassword($userName, $password) 
    {
        return array(
            new Step\Given('I am on "/login"'),
            new Step\Given('I should see "fert"')
        );
    }

//
// Place your definition and hook methods here:
//
//    /**
//     * @Given /^I have done something with "([^"]*)"$/
//     */
//    public function iHaveDoneSomethingWith($argument)
//    {
//        doSomethingWith($argument);
//    }
//
}

和一个同样简单的功能:

Feature: Administer a customers custom tariffs
    In order to provide custom call pricing to customers
    As a user of the Admin site
    I expect to be able to correctly administrate a users custom tariffs

Scenario: Listing existing custom tariffs
    Given I am on "/"
    I should see "Fert"

3 个答案:

答案 0 :(得分:6)

确保您的behat.yml文件位于正确的位置。它应该在项目的根目录中,而不是在任何子目录中。

答案 1 :(得分:1)

如果斯图尔特·格里姆肖的建议不是,那可能是因为两个原因:

  1. 您的composer.json配置不正确;获得制作Mink,Behat,Goutte,Selenium,Zombie,也许Symfony2所需的5或6个不同模块的正确版本是很棘手的。所以请在这些扩展的每个composer.json中手动检查其他组件的必需版本;另外,尽量不要使用mink-bundle,其所需的依赖项版本似乎很旧
  2. 不要从捆绑目录运行bin \ behat命令(在Windows或Linux下);否则找不到.yml配置文件(肯定是一些与相对路径相关的模糊原因)。您应该从项目的根目录运行bin \ behat命令(首先运行cd命令

答案 2 :(得分:0)

我也遇到了类似的致命错误

PHP Fatal error:  Call to a member function getSession() on a non-object in /home/ahad/sites/symfony/vendor/behat/mink-extension/src/Behat/MinkExtension/Context/RawMinkContext.php on line 101

我已将答案放在Struggling to get Mink working with Behat

这解决了我的问题。