CakePHP的“同”,在模仿对象方法不起作用(CakePHP “with” method in m

2019-09-18 07:02发布

我想测试使用CakePHP 2.2 RC1我的应用程序,在我的控制器的某些动作,我需要验证对象的一个信息,在我的测试我已经创造了验证组件的模仿对象,但是当我调用该方法我的模拟对象变为无效,当我不把这个一切工作正常。

下面的模拟对象至极不工作

$this->controller->Auth
    ->staticExpects($this->any())
    ->method('user')
    ->with('count_id')
    ->will($this->returnValue(9));

感谢您的关注球员。

-

编辑

我上面的测试案例,这是一个非常简单的测试的全部代码。

class TagsControllerTest extends ControllerTestCase {
    public function testView(){
        $Tags = $this->generate('Tags', array(
            'components' => array(
                'Session',
                'Auth' => array('user')
            )
        ));
        $Tags->Auth->staticExpects($this->any())
            ->method('user')
            ->with('count_id')
            ->will($this->returnValue(2));

        $result = $this->testAction('/tags/view');
        $this->assertEquals($result, 2);
    }
}

而我在标签控制器动作的代码,这没有什么更多(用于测试目的)他们的用户对象与count_id作为参数返回。

public function view(){
    return $this->Auth->user('count_id');
}

运行我收到此消息的测试:

期望失败方法名是相等时调用的调用AuthComponent零次或多次参数0 ::用户(空)不匹配预期值。 无法断言预计空匹配“count_id”。

Answer 1:

看后AuthComponent代码,我觉得问题就在于,你不是嘲笑整个组件, 或者你没有嘲讽_getUser()方法。 不要忘了: 你不是嘲笑的方法是真正的方法!

如果你看一下代码,你会看到user()被称为_getUser()这又被叫做startup()

有两种方法来解决这个问题,首先是嘲笑整个AuthComponent

$Tags = $this->generate('Tags', array(
        'components' => array(
            'Session',
            'Auth' /* no methods */
        )
    ));

或模拟_getUser()除了user()

$Tags = $this->generate('Tags', array(
        'components' => array(
            'Session',
            'Auth' => array('user', '_getUser')
        )
    ));

但愿,这应该解决您的问题。



Answer 2:

我面临着我无法提供的方案解决同样的问题。

的解决方案是使用staticExpects()而不是预计()作为用户是静态函数。

$batches->Auth->staticExpects($this->once())->method('user') 
        ->with('id')
        ->will($this->returnValue(1)); 


文章来源: CakePHP “with” method in mock object don't Work