1

BehatContext と MinkContext の違いがよくわからず、アプリでどちらか一方を継承する理由がわかりません。基本的に、すべての関数で新しい Client オブジェクトをインスタンス化する必要がある理由がよくわかりません。behat.yml ファイルに goutte がロードされているので、$this を使用できるはずです。

ヒントはありますか?

<?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は、ほとんどの独自のコンテキストでデフォルトで選択される基本的なコンテキストです。

MinkContextMink セッションにアクセスできる特殊なコンテキストです。また、いくつかの基本的なステップ定義も含まれています。そのため、決して拡張しないでください (ステップ定義は複製できないため、拡張できるのは 1 回だけだからです)。

Mink セッションにアクセスする必要がある場合は、RawMinkContext. MinkContextこれは、ステップ定義なしのようなものです。

基本的に、すべての関数で新しい Client オブジェクトをインスタンス化する必要がある理由がよくわかりません。behat.yml ファイルに goutte がロードされているので、$this を使用できるはずです。

クライアントを自分でインスタンス化しようとしているのはなぜですか? 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 に答える