我有一個控制器調用一個服務,它是一個資源的包裝。像這樣:測試控制器,取決於基於資源的服務
app.factory("Service", ["$resource", function ($resource) {
return $resource("/api/Service/get");
}]);
服務方法的返回值被分配給控制器內的變量。通常,該變量的類型爲Resource
,它包含promise
。當promise被解析時,變量將被填充所有從後端返回的值。 我跟蹤承諾上的,然後,以便修改從後端接收到的模型。像這樣:
this.model = Service.get();
this.model.$promise.then(function(data) {
// do something with data
});
我需要測試我控制器的結果模型變量的值。 我發現要做到這一點的唯一方法,就是使用$ httpBackend以真正實現我的服務。然而,這是醜陋的,因爲然後,測試我的控制器,我必須通過請求路徑"api/Service/get"
到httpBackend.when()爲了使它以某種價值迴應。
摘錄形成我的測試:
// call Controller
$httpBackend.when('GET', '/api/Service/get').respond(someData);
$httpBackend.flush();
expect(scope.model.property).toBe(null);
這似乎和感覺完全錯誤的。使用單獨的服務來處理資源的關鍵在於控制器不知道url和http方法名稱。所以我該怎麼做?
換句話說,我想測試的是then
被調用,並做我需要做的事情。
我想我可以創建一個單獨的服務,在then
中調用,做我需要做的模型,但它感覺有點矯枉過正,如果我想要做的是例如將一個字段設置爲null取決於一個簡單的條件。
這篇對你的工作? – tasseKATT