samedi 25 juillet 2015

Error mocking concrete class with PHP mockery

The class under test is as follows:

class ElasticSearchInstaller
{
    /**
     * Version of ElasticSearch
     *
     * @var \ElasticSearch\Requierments
     */
    protected $requirements;        

    /**
     * Object Constructor.
     * 
     * @param Requierments $requirements 
     */
    public function __construct(Requirements $requirements)
    {
        $this->requirements = $requirements;
    }

    /**
     * Set requirements
     *
     * @return bool
     */
    public function canInstall() 
    {
        return ($this->requirements->checkRequirements());
    }   
}

The test looks as follows:

class ElasticSearchInstallerTest extends TestCase
{
    /** @test **/
    public function it_can_check_if_its_installable()
    {
        $requirements = m::mock('alias:ElasticSearch\Requirements');

        $requirements->shouldReceive('checkRequirements')->once()->andReturn(true); 

        $installer = new ElasticSearchInstaller($requirements);

        $this->assertInternalType('bool', $installer->isInstalled());
    }    
}

Although for some reason it does not pass, as the mock says checkRequirements() is not being called and expects to be called once.

1) ElasticSearchInstallerTest::it_can_check_if_its_installable
Mockery\Exception\InvalidCountException: Method checkRequirements() from App\ElasticSearch\Requirements should be called
 exactly 1 times but called 0 times.

Aucun commentaire:

Enregistrer un commentaire