2013-08-29 109 views
0

美好的一天Symfony 1.4在功能測試壓縮輸出內運行任務

我正在爲一個項目使用PHP Symfony 1.4.20框架。我已經構建了啓動TASKS的功能測試頁面,以便一旦任務完成運行,從其生成的數據庫中捕獲數據,並監視此異步腳本行爲的輸出。問題是,當一個TASK被調用時,它輸出所有的Doctrine查詢和TASK輸出,當執行一個測試時:all,產生可疑的輸出,即使測試用例都成功了。 我的問題:如何從我的功能測試腳本中抑制此輸出?

這裏是任務調用

chdir (sfConfig::get ('sf_root_dir')); // Trick plugin into thinking you are in a project directory 
$task = new someTask ($this->dispatcher, new sfFormatter()); 
$task->run (array(), array (
     'limit' => '1000', 
     'env' => 'dev' 
)); 

下面的示例輸出我希望抑制

2013-08-29 20:34:56: TASK STARTED 
>> Doctrine_Connection_Statement execute : SELECT m.id AS m__id, m.subscription_id AS m__subscription_id, m.object AS m__object, m.status AS m__status, m.retries AS m__retries, m.type AS m__type, m.created_at AS m__created_at, m.updated_at AS m__updated_at FROM message_queue m WHERE (m.status = ?) LIMIT 1000 - (1) 
>> Doctrine_Connection_Statement execute : SELECT s.id AS s__id, s.mobile_id AS s__mobile_id, s.campaign_id AS s__campaign_id, s.status AS s__status, s.send_content_message AS s__send_content_message, s.last_sent_content_group_rel_id AS s__last_sent_content_group_rel_id, s.billed_total AS s__billed_total, s.billed_current_month AS s__billed_current_month, s.billed_count AS s__billed_count, s.created_at AS s__created_at, s.updated_at AS s__updated_at FROM subscription s WHERE (s.id = ?) - (188) 
>> Doctrine_Connection_Statement execute : INSERT INTO log_tx (subscription_id, is_content_message, billing_rule_id, content_charge, toaddress, mobile_network_id, content, toc, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - (188, 1, 4, 250, 27820000090, 2, Test for legal mobile, SMS, 2013-08-29 20:34:56, 2013-08-29 20:34:56) 
>> Doctrine_Connection_Statement execute : UPDATE message_queue SET status = ?, updated_at = ? WHERE id = ? - (0, 2013-08-29 20:34:57, 694) 
2013-08-29 20:34:57: SUCCESS: Message id [694] processed to [27820000090] 
2013-08-29 20:34:57: TASK COMPLETED 
>> Doctrine_Connection_Statement execute : SELECT MAX(l.id) AS l__0 FROM log_tx l WHERE (l.subscription_id = ? AND l.content_charge > 0) - (188) 
>> Doctrine_Connection_Statement execute : SELECT l.id AS l__id, l.toaddress AS l__toaddress, l.subscription_id AS l__subscription_id, l.mobile_network_id AS l__mobile_network_id, l.toc AS l__toc, l.content AS l__content, l.content_charge AS l__content_charge, l.delivery_status AS l__delivery_status, l.sub_code AS l__sub_code, l.result_text AS l__result_text, l.is_content_message AS l__is_content_message, l.billing_rule_id AS l__billing_rule_id, l.created_at AS l__created_at, l.updated_at AS l__updated_at FROM log_tx l WHERE (l.id = ?) - (858) 
ok 2 - LogTx Content Charge Matches 

的例子你會發現確定2 - LogTx內容收費匹配這是一個通過的測試用例

我已經搜索這個答案,但它似乎沒有人有過這個問題之前,所以任何幫助將不勝感激。也許我做這一切都錯了?

在此先感謝...

回答

0

我假設你正在做的任務外的實際斷言,在這種情況下,我認爲最簡單的方法就是打開一個新的輸出緩衝區,然後它沒有像打印刷新:

ob_start(); 
$task->run (array(), array (
     'limit' => '1000', 
     'env' => 'dev' 
)); 
ob_end_clean(); 

任何輸出到標準輸出由輸出緩衝器被捕獲,並且不ob_end_clean印刷後丟棄。

+0

謝謝,我試過了,但它似乎沒有什麼區別... –

+0

其他人可能想給這個問題一個bash?仍然找不到解決方案... –