Javascript 如何使用Behat/Mink和selenium独立服务器测试引导模式

Javascript 如何使用Behat/Mink和selenium独立服务器测试引导模式,javascript,selenium,testing,behat,mink,Javascript,Selenium,Testing,Behat,Mink,我只想简单介绍一件我尝试了很长时间的事情,最近我发现了一种简单的方法。我将使用Behat/Mink和selenium独立服务器测试引导模式 工具: “behat/behat v3.*” “behat/mink v1.7” “behat/mink扩展v2.2” “behat/mink-selenium2-driver v*” “Firefox 46.0.1” “selenium-server-standalone-2.53.1” 首先,我们需要初始化行为并对其进行配置。在我的例子中,我将所有测

我只想简单介绍一件我尝试了很长时间的事情,最近我发现了一种简单的方法。我将使用Behat/Mink和selenium独立服务器测试引导模式

工具:

  • “behat/behat v3.*”
  • “behat/mink v1.7”
  • “behat/mink扩展v2.2”
  • “behat/mink-selenium2-driver v*”
  • “Firefox 46.0.1”
  • “selenium-server-standalone-2.53.1”
首先,我们需要初始化行为并对其进行配置。在我的例子中,我将所有测试存储在名为behat wish的文件夹中,该文件夹位于名为tests的文件夹中

请参见下文文件夹结构的外观:

  • 根文件
    • 文件夹1
    • 文件夹2
    • 文件夹n
    • 测验
      • 比哈特
        • 上下文
        • 小黄瓜
    • 行为
基本上,我所有的上下文类都在context文件夹中,我所有的功能都在gherkin文件夹中

下一步将在behat.yml文件中添加配置。您可以在那里定义所有配置文件、套件、变量等。请注意,
默认
套件中的过滤器内部的
~@javascript
标记,我们告诉您,要从该上下文中排除标记为
@javascript
的所有功能。另外,请注意,在第二套
(浏览器)
,在本例中,我们告诉behat只执行标记为
@browser
的功能

请参见下面的behat.yml的外观:

default:
    suites:
        default:
            paths: [%paths.base%/tests/behat/gherkin/custom.feature]
            contexts: [Tests\behat\features\FeatureContext]
            filters:
                tags: ~@javascript

        # Browser inteaction
        browser:
            paths: [%paths.base%/tests/behat/gherkin/browser.feature]
            contexts: [Tests\behat\features\BrowserContext]
            filters:
                tags: "@browser"

    extensions:
        Behat\MinkExtension:
            selenium2: ~
                #wd_host: "http://127.0.0.1:4444/wd/hub"
            base_url: "http://localhost/"
接下来,我们需要创建一个至少有一个场景要测试的特性。在这种情况下,我们必须假设有一个网页带有一个触发模式的按钮,并且模式将包含文本“Hello wold!”

请参见下面的“此功能的外观”:

Feature: Testing a bootstrap modal
   In order test javascript with behat/mink
   As a user
   I want to check a bootstrap modal

   @javascript @browser
   Scenario: Check a bootstrap modal text
      Given I am on "some-page"
      When I press "some-button"
      Then An alert modal should show up with:
      """
      Hello world!
      """
最后,这是上下文的外观:

<?php 

use Behat\Behat\Context\Context;;
use Behat\Gherkin\Node\PyStringNode;
use PHPUnit_Framework_TestCase as PHPUnit;
use Behat\MinkExtension\Context\MinkContext;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Behat\Tester\Exception\PendingException;

class BrowserContext extends MinkContext implements Context, SnippetAcceptingContext 
{
    private $baseUrl;

    public function __construct($baseUrl = "http://localhost/") 
    {
        $this->baseUrl = $baseUrl;
    }

    /**
     * @Then An alert modal should show up with:
     */
    public function anAlertModalShouldShowUpWith(PyStringNode $message) 
    {
        //prepare the js script
        //here we are checking if th emodal is visible
        $script = "(function(){return ($('#myModal').is(':visible'));})();";

        //store the result of the js code
        $result = $this->getSession()->evaluateScript($script);

        //check for true with phpunit
        PHPUnit::assertTrue($result);

        //prepare the js script
        //here we are getting all the modal html as a string
        $script = "(function(){return $('#myModal').html();})();";

        //store the result of the js code
        $result = $this->getSession()->evaluateScript($script);

        //check if the string contains our message
        PHPUnit::assertContains($message->getRaw(), $result);
    }
}