Git Product home page Git Product logo

Comments (1)

hrsetyono avatar hrsetyono commented on June 19, 2024

I fixed it by overriding getDouble at /application/tests/TestCase.php:

<?php

class TestCase extends CIPHPUnitTestCase {
  /**
   * Override to fix stub bug
   */
  public function getDouble($classname, $params, $constructor_params = false) {
    $mockBuilder = $this->getMockBuilder($classname);
    if ($constructor_params === false) {
      $mockBuilder->disableOriginalConstructor();
    }
    elseif (is_array($constructor_params)) {
      $mockBuilder->setConstructorArgs($constructor_params);
    }

    $methods = [];
    $onConsecutiveCalls = [];
    $otherCalls = [];

    foreach ($params as $key => $val) {
      if (is_int($key)) {
        $onConsecutiveCalls = array_merge($onConsecutiveCalls, $val);
        $methods[] = array_keys($val)[0];
      } else {
        $otherCalls[$key] = $val;
        $methods[] = $key;
      }
    }

    $mock = $mockBuilder->setMethods($methods)->getMock();

    foreach ($onConsecutiveCalls as $method => $returns) {
      $mock->expects($this->any())->method($method)
        ->will(
          call_user_func_array(
            [$this->testCase, 'onConsecutiveCalls'],
            $returns
          )
        );
    }

    foreach ($otherCalls as $method => $return) {
      if (is_object($return) && ($return instanceof PHPUnit_Framework_MockObject_Stub || $return instanceof PHPUnit\Framework\MockObject\Stub\Stub)) {
        $mock->expects($this->any())->method($method)
          ->will($return);
      }
      elseif (is_object($return) && $return instanceof Closure) {
        $mock->expects($this->any())->method($method)
          ->willReturnCallback($return);
      }
      elseif ($return === ':void') {
        $mock->expects($this->any())->method($method);
      }
      else {
        $mock->expects($this->any())->method($method)
          ->willReturn($return);
      }
    }

    return $mock;
  }
}

from ci-phpunit-test.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.