mtmacdonald
mtmacdonald

Reputation: 15070

How to use PHPUnit assert methods in a Codeception functional test?

I'm using Codeception for unit, functional, and acceptance tests of my Laravel 4 PHP application.

My unit tests look this:

use Codeception\Util\Stub;
class ExampleTest extends \Codeception\TestCase\Test 
{
 public function testExample()
 {
  $example = true;
  $this->assertSame($example, true);
 }
}

My functional tests look like this:

use \TestGuy;
class ExampleCest
{
 public function example(TestGuy $I)
 { 
  $I->amOnPage('/auth/login');
  $I->see('Sign in');
 }
}

But I also want to use PHPUnit assert methods in my functional tests. But when I try to, I get this error:

Call to undefined method ExampleCest::assertSame()

How do I use PHP assert methods in a Codeception functional test?

Upvotes: 14

Views: 10348

Answers (5)

SarkarRipon
SarkarRipon

Reputation: 1

I was in the same problem and somehow figured it out. Here I am going to share what I did to achieve my goal. Step 1: Install Codeception assert module OR simply add the following module to composer.json file and then update composer.

"codeception/module-asserts": "^3.0",

Step 2: Then it requires to enable the assert module by adding the following module in the *.suite.yml file.

modules:
    enabled:
        - \Codeception\Module\Asserts:

And finally build Codeception once again by codecept build OR codeception build whichever alias works for you.

Upvotes: 0

Tavo Nieves J
Tavo Nieves J

Reputation: 101

In Codeception 4 just add the Asserts Module:

modules:
    enabled:
        - \Codeception\Module\Asserts

to your suite.yml config file and run codeception build

Upvotes: 5

conceptdeluxe
conceptdeluxe

Reputation: 3893

Since Codeception 2.1 (not 2.0) you can use it like the other asserts with:

$I->assertSame($expected, $actual, $message);

But don't forget to enable the Asserts module in your config - e.g.:

class_name: UnitTester
modules:
    enabled: [ Asserts ]

Please note: You might need to change your configuration when upgrading to 2.1 - see upgrade instructions: http://codeception.com/06-19-2015/codeception-2.1-rc.html

Upvotes: 34

Naresh
Naresh

Reputation: 31

Another workaround can be to use Helper Methods in test suite.

For example for assertSame() method

class ExpectedHelper extends \Codeception\Module
{
    protected $test;

    function _before(\Codeception\TestCase $test) {
        $this->test = $test;
    }

    function assertSame($expected, $actual, $message = '')
    {
        $this->test->assertSame($exception, $actual, $message);
    }
}

where ExpectedHelper being the test suite Helper name (eg: UnitHelper, FunctionalHelper) which should be under _support folder

and you can use it in your test as $I->assertSame('12340','12340');

Upvotes: 2

MrBinWin
MrBinWin

Reputation: 1319

\PHPUnit_Framework_Assert::assertSame()

Upvotes: 13

Related Questions