2016-03-05 37 views
0
if (isPromise(self.parentId)) { 
    console.log('DEBUG: outside then'); 
    self.parentId.then(function (parent) { 
    console.log('DEBUG: inside then'); 
    self.parentId = parent.id; 
    self.notes = Note.query({ 
     parent_type: self.parentType, 
     parent_id: self.parentId, 
    }); 
    }); 

我想測試Note.queryself.parentIdpromise時被調用。你如何觸發在Angular測試中解決的承諾?

it('when a promise is passed in', function() { 
    $controller('NotesController', {}, { 
    parentId: Lead.get({ id: 1 }).$promise, 
    parentType: 'leads', 
    }); 
    expect(Note.query.called).to.equal(true); 
}); 

這不起作用。外部日誌發生,但內部日誌不會。所以可以推測,問題在於承諾沒有解決。

1)爲什麼不工作? 2)我如何得到它的工作?

回答

0

爲了測試出承諾,你需要在承諾函中創建間諜函數。然後用一些模擬數據解決承諾。 首先在測試中注入$ q。

deferred = _$q.defer(); 
spyOn(self, 'parentId').and.returnValue(deferred.promise); 
deferred.resolve({ id: 102 }); 
$scope.$apply(); 

這應該可以解決您的承諾。更改字段名,按您的要求,它只是品嚐

+0

包括一個鏈接到相關的信息是幾乎沒有包括在你的答案的相關信息一樣好。外部鏈接可以,而且通常會停止或更改其結構,以便信息不再可用。 – Phrogz