2014-09-02 92 views
0

我在CakePHP中開發了一個網站,該組件使用PHPUnit進行測試。cakephp測試組件失敗

我創建一個名爲CurrencyConverter插件,我已經把一個組件插入到:

Plugin/CurrencyConverter/Controller/Component/CurrencyConverterComponent.php 

現在我想測試我的代碼。

我創建一個文件CurrencyConverterTest.php到:

Test/Case/Controller/Component/CurrencyConverterTest.php 

這是測試文件:

<?php 
class CurrencyConverterTestCase extends CakeTestCase { 
    var $uses = null; 
    public $CurrencyConverter; 

    function testConverter() { 
     $this->CurrencyConverter = ClassRegistry::init('CurrencyConverterComponent'); 
     $price = $this->CurrencyConverter->convert('EUR', 'EUR', '1000', 0, 0); 
     echo($price); 
    } 
} 
?> 

如果我跑我的測試這個錯誤:

MISSINGTABLEEXCEPTION 
Table currency_converter_components for model CurrencyConverterComponent was not found in datasource test. 
Test case: CurrencyConverterTestCase(testConverter) 

進入我的組件現在沒有調用數據庫,我該如何告訴測試不要使用模型?

或者我必須創建一個?

有人可以解釋我如何在不使用數據庫的情況下測試組件嗎?

感謝

回答

0

這是錯誤的:

ClassRegistry::init('CurrencyConverterComponent'); 

被認爲是負荷模型,構建與特定名稱的飛行模型,並按照慣例,它看起來該表currency_converter_components。

我建議你看一下CakePHP核心測試,例如AuthComponent測試,作爲如何在測試中實例化組件的例子。

$request = new CakeRequest(null, false); 
$this->Controller = new AuthTestController($request, $this->getMock('CakeResponse')); 
$collection = new ComponentCollection(); 
$collection->init($this->Controller); 
$this->Auth = new TestAuthComponent($collection); 

你的測試也缺少setUp()和tearDown()。這看起來並不像你讀過關於測試的文檔。 http://book.cakephp.org/2.0/en/development/testing.html#creating-your-first-test-case

爲什麼CurrencyConverter是一個組件?它處理數據,這顯然應該是一種模型方法或行爲。您還缺少方法和屬性前面的關鍵字。

+0

好的我知道,但你能爲我的組件提供一個成功的例子嗎?因爲AuthComponent測試不太容易理解,而且組件的範圍完全不同 – 2014-09-04 09:37:36