user1615069
user1615069

Reputation: 633

Problems with behat + mink

I'm trying to install behat + mink (on kohana framework, not symfony, I'm putting behat into the modules folder - I'm writting this just in case, but I guess that's not what causes my problem).

I am having the same search.feature file as it is in behat documentation, I'm changing features/bootstrap class into the:

<?php

use Behat\Behat\Context\ClosuredContextInterface,
    Behat\Behat\Context\TranslatedContextInterface,
    Behat\Behat\Context\BehatContext,
    Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
    Behat\Gherkin\Node\TableNode;     

use Behat\MinkExtension\Context\MinkContext;

/**
 * Features context.
 */
class FeatureContext extends MinkContext 
{

}

And when I type "behat" in the CLI I get the following error: Call to a member function getSession() on a non object in .....RawMinkContext.php on line 80.

I've read somewhere that it's the behat.yml file which causes this error. I think the right thing to do is to create new behat.yml file in the root of the installed behat folder and put this code inside:

default:
  extensions:
    Behat\MinkExtension\Extension:
      base_url: http://wikipedia.org
      goutte: ~
      selenium2: ~

  paths:
    features:  features
    bootstrap: features/bootstrap

annotations:
  paths:
    features: features/annotations

closures:
  paths:
    features: features/closures

But of couse it gives me the same error. I've tried a lot of configurations: copying only extensions part, changing default into context, copying the same content into three other behat.yml files (vendor/behat/behat, and vendor/behat/monk, and vendor/behat/monk-ententions) - none works.

Can someone tell me what's the right way to set this? Maybe someone here also had problems with that...

BTW. When I installed behat withough goutte, only with selenium2 driver, I was getting errors that goutte is not installed. But when I installed it with goutte, I was getting errors that there's no fabpot/goutte directory (or fapbot/, I don't remember, but I guess it was the first one :D), so I deleted everything and reinstalled behat with the following composer.json file, maybe this also has something to do with this error:

{
    "name":         "behat/mink-browserkit-driver",
    "description":  "Symfony2 BrowserKit driver for Mink framework",
    "keywords":     ["Symfony2", "testing", "browser"],
    "homepage":     "http://mink.behat.org/",
    "type":         "mink-driver",
    "license":      "MIT",

    "authors": [
        {
            "name":      "Konstantin Kudryashov",
            "email":     "[email protected]",
            "homepage":  "http://everzet.com"
        }
    ],

    "require": {
        "php":                  ">=5.3.1",
        "symfony/browser-kit":  ">=2.0.0,<2.2.0",
        "symfony/dom-crawler":  ">=2.0.0,<2.2.0",
        "behat/behat": "2.4.*@stable",
        "behat/mink": "1.4.*@stable",
        "behat/mink-extension": "*",
        "behat/mink-goutte-driver": "*",
        "behat/mink-selenium2-driver": "*"
    },

    "minimum-stability": "dev",

    "autoload": {
        "psr-0": {
            "Behat\\Mink\\Driver": "src/"
        }
    },

    "config": {
        "bin-dir": "bin/"
    }
}

Upvotes: 1

Views: 1856

Answers (1)

Dion Moult
Dion Moult

Reputation: 41

The recommended way to install Behat+Mink for anything, not just Kohana, is via Composer. See http://docs.behat.org/quick_intro.html for instructions. The autoload clause you have in your composer.json is not required.

As for your modules attempt, KO3.2 does not yet have the ability to load PSR-0 and so putting it in modules will not allow it to be loaded correctly.

Don't randomly copy your behat.yml - you only need one copy in your project root. If you are worried, you can explicitly load your behat.yml via bin/behat -c /path/to/behat.yml

With your composer.json set up correctly to have mink dependencies, you can then just do bin/behat -dl to verify mink works.

You can then do bin/behat --init to create your features filestructure.

This will create a FeatureContext which overrides Mink's definitions, so add

 require_once __DIR__.'/../../vendor/autoload.php';

and change the class definition to:

 class FeatureContext extends Behat\MinkExtension\Context\MinkContext

in your features/bootstrap/FeatureContext.php file.

Everything should work as expected now. I recently did a Behat+Mink+KO3 setup, feel free to see how I did it here: https://github.com/Moult/Eadrax/commit/b5dd813c92b82aea29eea13b5a30bae170aa57e6

Upvotes: 4

Related Questions