1

我相信我不清楚 BehatContext 与 MinkContext 的区别,也不确定为什么我会从我的应用程序中的一个或另一个继承。基本上我不清楚为什么我必须在每个函数中实例化一个新的 Client 对象。我应该可以使用 $this,因为我的 behat.yml 文件中加载了 goutte。

请问有什么提示吗?

<?php

namespace Main\ReferralCaptureBundle\Features\Context;

use Main\ReferralCaptureBundle\Features\Context\FeatureContext;

use Symfony\Component\HttpKernel\KernelInterface;
use Behat\Symfony2Extension\Context\KernelAwareInterface;
use Behat\MinkExtension\Context\MinkContext;
use Behat\MinkExtension\Context\RawMinkContext;

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

use Goutte\Client;

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

/**
 * Feature context.
 */
class FeatureContext extends RawMinkContext //MinkContext if you want to test web
                  implements KernelAwareInterface
{
    private $kernel;
    private $parameters;

    /**
     * Initializes context with parameters from behat.yml.
     *
     * @param array $parameters
     */
    public function __construct(array $parameters)
    {
        $this->parameters = $parameters;
        $this->useContext('behat', new BehatContext);
        $this->useContext('mink', new MinkContext);
    }

    /**
     * Sets HttpKernel instance.
     * This method will be automatically called by Symfony2Extension ContextInitializer.
     *
     * @param KernelInterface $kernel
     */
    public function setKernel(KernelInterface $kernel)
    {
        $this->kernel = $kernel;
    }



    /**
     * @Given /^I am on homepage$/
     */
    public function iAmOnHomepage()
    {

      // $this->getSession()->visit("/");

        $client = new Client();
        $crawler = $client->request('GET', 'http://local.referral.com/');

        $link = $crawler->selectLink('I am a Physician')->link();


       if (!count($link)>0)
       {
          throw new Exception("Home Page Not Loaded:\n");   

       } 
    }

    /**
     * @Given /^I follow "([^"]*)"$/
     */
    public function iFollow($arg1)
    {
        $client = new Client();
        $crawler = $client->request('GET', 'http://local.referral.com/');

       $link = $crawler->selectLink('Register')->link();
       $crawler = $client->click($link);         

    }

    /**
     * @When /^I fill in "([^"]*)" with "([^"]*)"$/
     */
    public function iFillInWith($arg1, $arg2)
    {
        throw new PendingException();
    }

    /**
     * @Given /^I press "([^"]*)"$/
     */
    public function iPress($arg1)
    {
        throw new PendingException();
    }

    /**
     * @Then /^I should see "([^"]*)"$/
     */
    public function iShouldSee($arg1)
    {
        throw new PendingException();
    }

    /**
     * @Given /^I should be on homepage$/
     */
    public function iShouldBeOnHomepage()
    {
        throw new PendingException();
    }






}
4

1 回答 1

3

我相信我不清楚 BehatContext 与 MinkContext 的区别,也不确定为什么我会从我的应用程序中的一个或另一个继承。

BehatContext是一个基本上下文,对于您自己的大多数上下文,这将是默认选择。

MinkContext是一个专门的上下文,可让您访问 Mink 会话。它还包含一些基本的步骤定义。这就是为什么你永远不应该扩展它(因为你只能扩展它一次,因为步骤定义不能重复)。

如果您需要访问 Mink Session,请扩展RawMinkContext. 这就像MinkContext没有步骤的定义。

基本上我不清楚为什么我必须在每个函数中实例化一个新的 Client 对象。我应该可以使用 $this,因为我的 behat.yml 文件中加载了 goutte。

你为什么要自己实例化客户端?只需使用 Mink Session,它将为您完成:

<?php

namespace Main\ReferralCaptureBundle\Features\Context;

// your use statements here...

class FeatureContext extends RawMinkContext
{        
    /**
     * @Given /^I am on homepage$/
     */
    public function iAmOnHomepage()
    {
        $session = $this->getSession();
        $session->visit($this->locatePath('/'));

        $link = $session->getPage()->findLink('I am a Physician');

       if (null === $link) {
          throw new Exception("Home Page Not Loaded:\n");   
       }
    }

    /**
     * @Given /^I follow "([^"]*)"$/
     */
    public function iFollow($arg1)
    {
        $link = $this->getSession()->findLink('Register');

        if (null === $link) {
            throw new \LogicException('Could not find the "Register" link');
        }

        $link->click();                    
    }

     // ...   
}

MinkContext查看灵感中的步骤定义。

要阅读(说真的,请先阅读文档):

于 2013-08-14T08:55:56.943 回答