我如何模拟 InlineScript?

How do I mock InlineScript?

这是我要测试的服务:

class AffairesJSService {
    private $inlineScript;
    private $url;
    private $sBasepath;

    public function __construct($inlineScript, $url, $sBasepath)
    {
        $this->inlineScript = $inlineScript;
        $this->url          = $url;
        $this->sBasepath    = $sBasepath;
    }

    public function inject($aParams)
    {
        $url = $this->url;
        $containerRoutes = new Container('IntraRouteListAffaires');

        $sEtatAffaire    = $containerRoutes->sEtatAffaire !== null    ? $containerRoutes->sEtatAffaire    : 'EN_COURS';
        $iIdPrestation   = $containerRoutes->iIdPrestation !== null   ? $containerRoutes->iIdPrestation   : 0;
        $iIdCentreProfit = $containerRoutes->iIdCentreProfit !== null ? $containerRoutes->iIdCentreProfit : 0;

        $this->inlineScript->appendFile($this->sBasepath . $aParams["myfile"]);

        $sUrlListContrats = $url('module/action', ['idaffaire' => $aParams['idaffaire']]);

        $this->inlineScript->captureStart();
            echo <<<JS
            loadPanelContrats('$sUrlListContrats'); JS;
            $this->inlineScript->captureEnd();
    } }

好吧,这是我的测试,但我不知道如何模拟 InlineScripts 和声明 appendFile :

class AffairesJSServiceTest extends TestCase
{
    /**
     * @var MyService
     */
    private $myService;

    public function setUp()
    {
        $mockUrl = $this->getMock('Zend\View\Helper\Url\Url', array(), array(), '', false);

        $inlineScript = $this->getMock('Zend\View\Helper\InlineScript\InlineScript', array(), array(), '', false);

        $sBasepath = "/my/path";

        $this->myService = new AffairesJSService(
            $inlineScript,
            $mockUrl,
            $sBasepath,
        );
    }

    public function testInject()
    {
        $aParams = array();
        //$aParams["myfile"] = 'myfile';
        $this->myService->inject($aParams);
    }

你能帮忙吗?最有问题的问题是如何模拟特定的 zf2 方法。谢谢

使用流畅的语法,您可以执行以下操作。 mock 的所有方法都将不执行任何操作并且 return null :

$inlineScript = $this->getMockBuilder('Zend\View\Helper\InlineScript\InlineScript')
    ->disableOriginalConstructor()
    ->getMock();

如果只想模拟特定方法,可以用setMethods()方法指定:

$inlineScript = $this->getMockBuilder('Zend\View\Helper\InlineScript\InlineScript')
    ->setMethods(['appendFile'])
    ->disableOriginalConstructor()
    ->getMock();