我想检查一下这样的事情:
<?php
$I->amOnPage('/go/google');
$I->seeCurrentUrlEquals('http://google.com');
但我得到错误:
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'http://google.com'
+''
Scenario Steps:
2. I see current url equals "http://google.com"
1. I am on page "/go/google"
想法只是检查用户是否被重定向到外部资源。
答案 0 :(得分:4)
不幸的是,Codeception的seeCurrentUrlEquals()
和seeCurrentUrlMatches()
方法被错误命名,因为它们不允许对整个URL进行断言,而只是针对URI部分。
我通过在Helper类中声明以下方法解决了这个问题:
public function seeFullCurrentURLEquals($value)
{
return ($this->getModule('PhpBrowser')->client->getHistory()->current()->getUri() == $value);
}
然后,在场景中,您可以简单地执行以下操作:
$I->seeFullCurrentUrlEquals('google.com');
答案 1 :(得分:2)
我会通过换掉第2行来提高@ rickroyce的评论
$I->wait(2);
类似
$I->waitForElement('#gbqfq', 30);
等待谷歌搜索输入字段,并且更加强大,然后假设2秒足以填充页面。
那么完整的例子就是
<?php
$I->amOnPage('/go/google');
$I->waitForElement('#gbqfq', 30);
$I->seeCurrentUrlEquals('http://google.com');
(通常它会将添加内容作为评论,但因为我没有足够的声誉,所以答案是:))
答案 2 :(得分:1)
正如@gopherIT所提到的,Codeception在使用这些函数时不会检查URL的域名部分。
如果你使用 phpBrowser ,这里有几个选项。
我写了两个函数verifyRedirect()
和verifyNoRedirect()
,可用于此目的。您只需在_support/Helper/Acceptance.php
内弹出代码。
然后可以这样测试......
$I->verifyRedirect('http://www2.ames.net.au/', 'http://www.ames.net.au/', 301);
查看代码:https://gist.github.com/SimonEast/b550e04300ac56cb5ac8eea704fccdfa
GaryJones还为测试重定向整理了另一个(稍微复杂一点)的变体并将其发布在Github上:
https://gist.github.com/GaryJones/284eea905cff882cc7cb
它允许你运行这样的测试......
$I = new RedirectsTester($scenario);
$I->wantTo('check 301 redirects are working');
// First, test /login/ page gets rewritten to https://
$I->seePermanentRedirectToHttpsFor('login/');
$I->seePermanentRedirectToHttpsFor('login/?redirect_to=foo');
// For all other redirects, a Location header is sent, so we stop the redirect
// and just check that header instead.
$I->followRedirects(false);
// External
$I->sendHead('facebook');
$I->seePermanentRedirectTo('https://www.facebook.com/DanielsTrading');
// Internal link
$I->sendHead('don-debartolo/access');
$I->seePermanentRedirectTo('ddebartolo/#account');
如有必要,查看他的源代码可能有助于进一步定制。
答案 3 :(得分:0)
您想使用哪种浏览器?大多数浏览器需要一些时间来解释重定向。访问网站“/ go / google”后,测试立即运行url检查,这可能比浏览器可以更快地执行重定向。给它一点时间。
尝试:
<?php
$I->amOnPage('/go/google');
$I->wait(2);
$I->seeCurrentUrlEquals('http://google.com');
亲切的问候
答案 4 :(得分:0)
以下是一段可以提供帮助的代码:
$uri_to_redirect = '/use_stackoverflow';
$redirected_to_uri = '/love_stackoverflow';
$I->wantToTest( 'if rediecting works well from : '.$uri_to_redirect.' to : '.$redirected_to_uri );
$I->amOnUrl( $mydomain.$uri_to_redirect );
$I->seeCurrentUrlEquals( $redirected_to_uri );
你需要保持头脑,“seeCurrentUrlEquals”验证URI,而不是URL。
问候
答案 5 :(得分:-1)
检查响应代码会不会更好?
$I->amOnPage('/go/google');
$I->seeResponseCodeIs(302);
$I->seeHttpHeader('Location', 'http://google.com');