Behat在重定向时附加额外的url

时间:2018-03-22 08:47:47

标签: symfony redirect behat

我正在使用Symfony 3.4和FOSUserBundle以及Behat进行测试。

配置&代码:

Behat config:
    extensions:
        Behat\MinkExtension:
            sessions:
                default:
                    symfony2: ~
                javascript:
                    selenium2: ~
            browser_name: firefox
            show_auto:    false
            base_url: 'http://my-virutalhost.test'

        Behat\Symfony2Extension:
            kernel:
                env: "acceptance"
                debug: "true"


    Scenario: I execute enpoint address with wrong redirect code
      When I go to the url "/redirect/code1code2"
      Then I should be redirected to url "http://some-page-here.com"

/**
 * @When /^I go to the url "([^"]+)"$/
 */
public function iGoToTheUrl($url) {
    $this->lastResponse = $this->getSession()->visit($url);
    $this->getSession()->getDriver()->getContent();
    //var_dump($url, $this->getSession()->getDriver()->getCurrentUrl());
}

/**
 * Checks, that current page PATH matches regular expression.
 *
 * @Then /^(?:|I )should be redirected to (?P<pattern>"(?:[^"]|\\")*")$/
 */
public function iAmRedirectedToUrl($pattern) {
    $this->assertSession()->addressMatches($this->fixStepArgument($pattern));
}

问题:
以某种方式Behat从我的应用程序附加到我的重定向网址http://some-page-here.com /登录,这会创建链接:http://some-page-here.com/login。我不知道为什么它会为重定向创建这样的地址。 - 编辑 -
当我检查页面内容$ this-&gt; getSession() - &gt; getDriver() - &gt; getContent()时,我看到登录页面的代码

- 编辑 -

  1. / login - 这是我的应用程序登录
  2. 我想重定向到 外页,不在我的应用程序内的页面中,并检查最终地址是否是来自外部重定向的页面地址
  3. 我的安全配置:

    access_control:
     - { path: ^/redirect, role: IS_AUTHENTICATED_ANONYMOUSLY }
    

2 个答案:

答案 0 :(得分:0)

我会仔细研究Firefox,因为我不认为Behat是罪魁祸首。

据我所知,发生的事情是:

  1. Behat告诉Firefox导航到&#39; http://my-virutalhost.test/redirect/code1code2&#39;
  2. 此网址通过HTTP重定向回复到&#39; http://some-page-here.com/&#39;
  3. Firefox尊重HTTP重定向但由于某种原因追加/登录到URL。
  4. 我会查看Firefox正在获取的响应,以确保返回正确的重定向网址。

答案 1 :(得分:0)

你的重定向好吗?如果您的内容页面显示/ login,则When I go to the url "/redirect/code1code2"必须发送到此页面。

当您使用MinkExtension时,您是否尝试使用默认步骤When I go to '/redirect/code1code2'

如果直接When I go to the url 'http://some-page-here.com'

,您是否可以访问该页面?

对于http://some-page-here.com/login内容,这很奇怪...如果您的网页能够向您显示/登录内容,则必须说它可以访问http://my-virutalhost.test/login