2016-12-21 61 views
1

我正在使用phpunit在Laravel中進行測試。我運行一個測試,將其插入文本框並按下按鈕。然後,這是一個將信息發送到服務器並返回響應的Ajax Post。如果我返回一個字符串有下面的代碼,在測試中,我應該得到該字符串正確?在PHPUnit和Laravel測試中使用Ajax請求

我有以下的控制器:

class MyController extends Controller{ 
    public static function createNewComplaintStep_2(){ 
      return "error"; 
    } 
} 

路線:

Route::post('/createNewComplaint_Step2', '[email protected]_2'); 

與形式和AJAX方法的視圖:

<form id="formToSubmit" data-value="createNewComplaint_Step2" class="form-horizontal"> 
       {!! csrf_field() !!} 
       <div class="form-group"> 
        <label class="col-md-4 control-label">Customer:</label> 
        <div class="col-md-3"> 
         <input class="form-control" name="customer_name" required>        
        </div> 
       </div> 
     <button type="submit" class="btn btn-success" name="subBTN"\> 
     </form> 
(...) 
<script> 
$('#formToSubmit').on('submit', function(e) { 
    var href = $(this).data('value'); 
    e.preventDefault();  
    $.ajax({ 
     type: "POST", 
     url: href, 
     data: $(this).serialize(), 
     success: function(msg) { 
      $("#container-fluid").html(msg); 
      $('.se-pre-con').hide(); 
     } 
    }); 
}); 
</script> 

PHPUnit的測試:

$this->visit('/createNew') 
      ->type('NAME', 'customer_name') 
      ->press('subBTN') 
      ->see('error'); 

有什麼問題嗎?因爲如果我運行代碼,我得到錯誤

無法斷言頁面包含HTML [錯誤]。請檢查以上內容

以上內容爲高於的視圖。似乎ajax請求不適用於phpunit。 有什麼建議?

在此先感謝!

回答

0

您正在使用jQuery阿賈克斯,這是一個客戶端腳本語言工作,基本上都在瀏覽器中運行無法通過Laravel在測試中使用執行。

這裏你的Ajax甚至沒有執行,所以你怎麼能得到字符串,這就是爲什麼這個錯誤即將到來。

但是你可以嘗試一些擴展/驅動程序 laravel,可以啓用此功能。
只要看看Selenium: - https://laracasts.com/discuss/channels/testing/has-anyone-tried-laravel-integrated-package-in-laravel-52