2009-12-31 51 views
0

我開始使用CakePHP框架和SimpleTest編寫單元測試。當您的控制器將瀏覽器重定向到另一個頁面時,該文檔將介紹a problem with the testAction method。有一個有希望的筆記link to a possible fix,但鏈接被打破。CakePHP的testAction方法可以在重定向調用之後生存嗎?

有沒有人得到這個工作?知道如何找到那個斷開的鏈接應該指向哪裏?

我找到了使用partial mock objects覆蓋重定向調用的討論,但這似乎不適用於testAction方法。我懷疑我必須以某種方式向調度員註冊模擬控制器。

這是similar question on Google groups

回答

1

我得到了一些工作,所以我想我會在這裏發佈。我不確定我是否對此感到滿意。

如果你想能夠測試重定向,改變這種:

$this->redirect(array('action'=>'index')); 

這樣:

$this->redirect(array('action'=>'index'), null, false); 
return 'redirected to index'; 

現在您的測試可以是這個樣子:

$data = array(...); 
$result = $this->testAction(
    '/people/edit/1', 
    array('method' => 'post', 'data' => $data)); 
$this->assertEqual(
    'redirected to index', 
    $result); 

控制器的重定向方法的問題是,它默認調用exit(),並且退出整個測試套件。該版本將false傳遞給重定向方法的$ exit參數,然後使用return而不是exit()。返回值只是測試用例驗證的東西,如果你喜歡的話,儘管它與重定向頭一起回顯給瀏覽器。但只要這是一條小信息,我並不認爲有任何問題。

當我們調用return而不是exit()時,似乎沒有任何可能在控制器方法後執行的重要代碼。快速測試顯示該頁面的行爲正常。

+1

我知道這是非常古老的,但你可以查看https://github.com/jeremyharris/extended_test_case,這有助於緩解1.3中的testAction問題。你會想嘲笑你的控制器的重定向功能。 – jeremyharris 2012-04-17 14:15:07

+0

謝謝,@jeremyharris,我會檢查出來。 – 2012-04-17 17:52:17

相關問題