Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Codeception - how to test for redirects
<?php
// Simply place the following two functions in _support/Helper/Acceptance.php
// Then you can call $I->verifyRedirect(...) inside your tests
namespace Helper;
class Acceptance extends \Codeception\Module
{
/**
* Ensure that a particular URL does NOT contain a 301/302
* nor a "Location" header
*/
public function verifyNoRedirect($url)
{
$phpBrowser = $this->getModule('PhpBrowser');
$guzzle = $phpBrowser->client;
// Disable the following of redirects
$guzzle->followRedirects(false);
$phpBrowser->_loadPage('GET', $url);
$response = $guzzle->getInternalResponse();
$responseCode = $response->getStatus();
$locationHeader = $response->getHeader('Location');
$this->assertNotEquals($responseCode, 301);
$this->assertNotEquals($responseCode, 302);
$this->assertNull($locationHeader);
$guzzle->followRedirects(true);
}
/**
* Ensure that a particular URL redirects to another URL
*
* @param string $startUrl
* @param string $endUrl (should match "Location" header exactly)
* @param integer $redirectCode (301 = permanent, 302 = temporary)
*/
public function verifyRedirect($startUrl, $endUrl, $redirectCode = 301)
{
$phpBrowser = $this->getModule('PhpBrowser');
$guzzle = $phpBrowser->client;
// Disable the following of redirects
$guzzle->followRedirects(false);
$phpBrowser->_loadPage('GET', $startUrl);
$response = $guzzle->getInternalResponse();
$responseCode = $response->getStatus();
$locationHeader = $response->getHeader('Location');
$this->assertEquals($responseCode, $redirectCode);
$this->assertEquals($endUrl, $locationHeader);
$guzzle->followRedirects(true);
}
}
@FelikZ

This comment has been minimized.

Copy link

@FelikZ FelikZ commented Sep 21, 2017

Thanks!

@Syednazirhussain

This comment has been minimized.

Copy link

@Syednazirhussain Syednazirhussain commented Oct 28, 2017

nice staff

@Vitexus

This comment has been minimized.

Copy link

@Vitexus Vitexus commented Dec 17, 2017

Star for you!
Thanks

@zacharylinke

This comment has been minimized.

Copy link

@zacharylinke zacharylinke commented Apr 5, 2018

Very helpful, thanks!!

@skiingdomo

This comment has been minimized.

Copy link

@skiingdomo skiingdomo commented Jul 30, 2020

$response->getStatus(); was throwing an error, changed to $response->getStatusCode(); and it seems to work.

Thanks mate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment