2017-06-26 2 views
3

Ich würde gerne in Ghekin Feature-Dateien verwenden PhpStorm "Go To Declaration" -Funktion (Command + B auf einem Mac) bei der Verwendung von Codeception. Allerdings ist PhpStorm nicht scheinen, um herauszufinden, wo die Schritte definiert sind, und gibt diese Warnung:Nicht definierte Schritt Referenz in PHPStorm bei der Verwendung von Codeception und Gurke

undefiniert Schritt Hinweis: [...] Warning screenshot

Wenn ich verwende Behat, PhpStorm versteht wo die Schritte definiert sind.

Schritte

  1. mkdir codeception
  2. cd codeception
  3. composer require "codeception/codeception" --dev
  4. ./vendor/bin/codecept bootstrap
  5. ./vendor/bin/codecept generate:feature acceptance first
  6. Öffnen Sie das Projektverzeichnis in PhpStorm zu reproduzieren.
  7. Stellen Sie sicher, dass PhpStorm weiß, dass Codeception installiert ist: Codeception PhpStorm configuration
  8. Vergewissern Sie sich, dass die PhpStorm Plugins Gherkin und Codeception Rahmen installiert sind.
  9. Fügen Sie einen Schritt zu tests/acceptance/first.feature hinzu.
  10. ./vendor/bin/codecept gherkin:snippets acceptance

Dies führt zu dem folgenden Code. (Nicht alles ist im Preis inbegriffen - lassen Sie mich wissen, wenn ich etwas hinzufügen müssen.)

tests/acceptance/first.feature:

Feature: first 
    In order to ... 
    As a ... 
    I need to ... 

    Scenario: try first 
    When I visit "/" 

tests/_support/AcceptanceTester.php:

<?php 

/** 
* Inherited Methods 
* @method void wantToTest($text) 
* @method void wantTo($text) 
* @method void execute($callable) 
* @method void expectTo($prediction) 
* @method void expect($prediction) 
* @method void amGoingTo($argumentation) 
* @method void am($role) 
* @method void lookForwardTo($achieveValue) 
* @method void comment($description) 
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL) 
* 
* @SuppressWarnings(PHPMD) 
*/ 
class AcceptanceTester extends \Codeception\Actor 
{ 
    use _generated\AcceptanceTesterActions; 

    /** 
    * Define custom actions here 
    */ 

    /** 
    * @When I visit :arg1 
    */ 
    public function iVisit($arg1) 
    { 
     throw new \Codeception\Exception\Incomplete("Step `I visit :arg1` is not defined"); 
    } 
} 

Allerdings ist PhpStorm nicht wissen, wo iVisit() ist. Wie kann ich das beheben?

Antwort

2

Derzeit PhpStorm scheint das Behat Context-Interface zu verwenden, um zu bestimmen, welche Klassen in .feature Dateien Implementierungen für die Gherkin Schritte definieren, so eine Abhilfe finden haben PhpStorm die Schritte in dem codeception Tester sind die Behat\Behat\Context\Context Schnittstelle irgendwo in Ihrem Quellbaum hat hinzuzufügen

/* Context.php */ 
namespace Behat\Behat\Context; 

interface Context { } 

und dann die AcceptanceTester diese Schnittstelle implementieren (was eine leer Markierungsschnittstelle)

class AcceptanceTester extends \Codeception\Actor implements Context ... 
+0

Das ist großartig, vielen Dank. Ich hätte nie daran gedacht (und verstehe immer noch nicht, warum es funktioniert). –

1

Aufbau von Roverwolf's Antwort.

Fügen Sie dies zum Anfang der AcceptanceTester-Datei hinzu.

namespace Behat\Behat\Context { 
    interface Context { } 
} 

Dann haben AcceptanceTester das implementieren. Namensräume wie diese zu verschmelzen, ist ein üblicher Trick beim Testen von PHP, um Methoden zu fälschen, die in anderen Namespaces existieren.

namespace { 
    class AcceptanceTester extends \Codeception\Actor implements \Behat\Behat\Context\Context 
    } 
} 
Verwandte Themen