63
A
回答
119
如果你只是需要對事件觸發和捕捉進行一些測試,我就是這麼做的。爲確保某個事件被激發($emit
-ed或$broadcast
-ed),間諜是要走的路。你需要將被調用$emit
或$broadcast
,然後只是做這樣的事情的範圍參考:
spyOn(scope, "$emit")
//run code to test
expect(scope.$emit).toHaveBeenCalledWith("MY_EVENT_ID", other, possible, args);
如果你不需要或不想要擔心是參數通過$emit
後,您可以在$rootScope
上放置$on
並設置標誌以瞭解事件是否已發出。事情是這樣的:
var eventEmitted = false;
$rootScope.$on("MY_EVENT_ID", function() {
eventEmitted = true;
});
//run code to test
expect(eventEmitted).toBe(true);
出於測試的功能,當事件被捕獲($on
)中運行,這是一個更容易一些。只需從inject
函數獲得$rootScope
,然後發送所需的事件。
$rootScope.$broadcast("EVENT_TO_TEST", other, possible, args);
//expects for event here
現在,我想這個事件處理將在指令或控制器(或兩者)爲了設置指令測試中發生的事情,看到https://github.com/vojtajina/ng-directive-testing。有關設置控制器測試,請參見https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L27
希望這有助於您。
0
下面是你應該遵循$廣播事件的角度JS
雖然inijecting初始化rootScope和範圍存根步驟如下給出:
var rootScope;
var scopeStub = beforeEach(function() {
inject(function($rootScope, _$controller_) {
rootScope = $rootScope;
scopeStub = $rootScope.$new();
$controller = _$controller_;
});
});
控制器創建使用rootScope像加薪事件後如下:
rootScope.$broadcast('eventName', parameter1);
0
我們用這個sintax爲A1
=========== Controller ========
var vm = this;
$scope.$on('myEvent', function(event, data){
console.log('event number', data.id);
});
============ Test =============
it('should throw myEvent', function() {
var data = {};
$scope.$broadcast('myEvent', {id:1});
$scope.$broadcast('myEvent', {id:2});
$scope.$broadcast('myEvent', {id:3});
});
============ Output ============
Chrome LOG: '--------------------------------------------'
Chrome LOG: 'event number', 1
Chrome LOG: 'event number', 2
Chrome LOG: 'event number', 3
相關問題
- 1. 角度測試點擊事件
- 2. 如何以角度單位測試statetransition?
- 3. 如何在角度飛鏢測試中觸發組件事件?
- 4. 如何使用角度測試文件?
- 5. 如何測試窗口點擊角度事件監聽器
- 6. 如何單元測試角度擴展
- 7. 角度e2e測試用於測試非角度應用
- 8. 如何測試RxJS事件
- 9. 如何測試PACKAGE_REPLACED事件
- 10. 角度測試提交事件的反應形式
- 11. 如何使用角度爲2/4的鼠標滾輪事件測試指令
- 12. 如何觸發單元測試的角度ui-select指令的更改事件?
- 13. 角度單元測試:如何運行基本測試
- 14. Django測試,事務和角度量角器
- 15. 如何爲以下角度服務編寫測試用例
- 16. 使用量角器+角度在進行ajax調用時測試事件使用量角器+角度
- 17. 角度測試用例
- 18. 角度js測試與Grunt
- 19. 角度 - 材質 - 測試 - $ mdSidenav
- 20. 角度和A/B測試
- 21. 以角度添加事件列表
- 22. 如何用角度測試json文件中的空數據
- 23. 如何在角度測試中創建新的(xml)文件
- 24. 量角器e2e足夠角度測試
- 25. 如何在量角器測試中訪問角度對象
- 26. 角度量角器如何測試點擊重定向狀態
- 27. 如何測試在角度量的接近度
- 28. 如何設置角度量角器測試到單獨的套件?
- 29. 如何有條件地運行測試規格 - 角度量角器茉莉花
- 30. 如何角2個測試
這對於精確匹配很好,但是如何匹配參數的一個子集?例如,如果參數只是一個對象{p1:'yes',p2:'no'}不管p2是什麼(或者它是否存在),你會如何期待p1:'yes'?我知道那裏有'任何'茉莉花鍵盤,但這似乎是相反的 - 沒有足夠的控制。任何中間地帶,你可以期待只是你想要的參數? – 2013-12-21 06:48:33
@LukeMadera茉莉花有'jasmine.objectContaining'。從文檔:jasmine.objectContaining適用於期望只關心實際對象中的某些鍵/值對的那些時間。 – 2014-11-17 14:06:52
謝謝,但會有一種方法來使用茉莉花?例如:'expect(scope。$ emit.calls.argsFor(0)[0]).BeBe('MY_EVENT_ID');' – cameronroe 2015-01-18 17:47:26