我找不到任何其他的問題/答案,以滿足我的需求,所以這裏是:
在AngularJS(1.2.14)控制器,我有一個事件偵聽器,執行ajax調用來獲取一些數據時聽到一個事件('fetchData')。提取成功後,將廣播一個事件(稱爲'fetchSuccess'),指令正在監聽(儘管該部分不相關)。
$scope.$on('fetchData', function() {
$scope
.submitSearch()
.then(function (results) {
$scope.$broadcast('fetchSuccess');
}, function() {
$scope.$broadcast('fetchError');
});
});
所以,在我的測試中,我想這樣做(假設「this.scope」是在測試套件控制器上一個新的$ scope對象):
it('should broadcast "fetchSuccess"', inject(function ($rootScope) {
var scope = this.scope,
spy = chai.spy(scope, '$broadcast');
// trigger the $broadcast event that calls the fetch method
scope.$broadcast('fetchData');
$rootScope.$apply();
expect(scope.$broadcast).to.be.called.with('fetchSuccess');
}));
但我不清楚如何在斷言中監聽$ broadcast事件。我不斷收到此錯誤:Asse田:預期函數(名稱args){...}
只是要清楚,我的問題是不是與事件廣播或運行期間聽衆的功能;該應用程序按預期工作。問題在於聆聽測試套件中的事件。
請注意,上述代碼只是此問題所需的必要代碼片段。在我的應用程序中,還有其他變量/方法被設置/調用,並且這些事情正確地測試出來。這意味着如果我測試是否調用實際的讀取方法,或者如果正確設置了特定的變量,那麼這些測試會通過。
我試過混合並匹配範圍變量,甚至通過scope.$on('fetchSuccess', fn)
監聽$廣播,但似乎沒有任何工作。 fetchSuccess事件似乎沒有發射,或者我沒有正確地聽它。
在此先感謝, 瑞恩。