2013-05-10 61 views
1

我有一個包含項目資源的模塊,代碼如下所示:我如何從Angular.js模塊的資源爲茉莉測試

editor_services.js

var editorServices = angular.module('editorServices', ['ngResource']); 
editorServices.factory('Project', ['$resource', '$http',function($resource, $http){ 
//...etc 

現在我想爲一個控制器編寫測試,該控制器需要一個項目資源作爲參數。我如何從editorServices變量中獲得該工廠創建的項目資源實例?

回答

7

這裏是角 http://plnkr.co/edit/kK5fDFIVpyZTInH1c6Vh?p=preview

基本設置是一個工作示例一個如何測試資源(或HTTP):在您的測試

  1. 負荷angular-mocks.js。這用模擬版本代替$httpBackend。見:http://docs.angularjs.org/api/ngMock。$ httpBackend

  2. 在你的測試電話$httpBackend.expect()創建期望被嘲笑。

  3. 當你想模擬服務器響應呼叫$httpBackend.flush()

  4. 有一個警告,從茉莉正常.toEqual()劑量不$resource工作,所以你必須創建一個像這樣的自定義匹配:

 
    beforeEach(function() { 
    this.addMatchers({ 
     // we need to use toEqualData because the Resource hase extra properties 
     // which make simple .toEqual not work. 
     toEqualData: function(expect) { 
     return angular.equals(expect, this.actual); 
     } 
    }); 
    }); 
+0

在你的例子中,如果我將'{id:1}'傳遞給'Projects.query' [測試失敗](http://plnkr.co/edit/1Rig6CBp3F2C0aHnd5ci?p=preview)。 有沒有一種方法可以期待GET請求,無論是否帶有GET參數?我只看到'regexp'作爲解決方案,但它看起來很髒。 – FelikZ 2013-08-05 15:23:54