在$promise中使用$broadcast, mocha如何知道事件何时在控制器$scope中触发?
How can mocha know when event fired on a Controller $scope using $broadcast inside of a $promise?
我找不到满足我需求的其他问题/答案,所以这里是:
在AngularJS(1.2.14)控制器中,我有一个事件监听器,当听到事件('fetchData')时,执行ajax调用来获取一些数据。获取成功后,一个事件(称为'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事件。AssertionError:期望函数(name, args){…}
只是为了清楚,我的问题不是事件广播器或监听器在运行时的功能;应用程序按预期工作。问题在于监听测试套件中的事件。
注意,上面的代码只是这个问题所需要的代码片段。在我的应用程序中,还有其他变量/方法被设置/调用,这些东西被正确地测试出来。这意味着如果我测试是否调用了实际的抓取方法,或者是否适当地设置了一个特定的变量,这些测试就会通过。
我试过混合和匹配范围变量,甚至通过scope.$on('fetchSuccess', fn)
收听$广播,但似乎没有任何作用。fetchSuccess事件似乎没有被发出,或者我没有正确地侦听它。
提前感谢,瑞安。
所以,我找到了我问题的答案,这都是我的错。虽然我不得不修改编写测试的方式,但核心问题就像监听错误事件一样简单!
但是,对于那些想知道我的测试是什么样子的人,这里是最后的测试(rootscope在其他地方被设置为$ rootscope):
it('should broadcast a "fetchSuccess" event', function (done) {
var eventEmitted = false;
this.scope.$on('fetchSuccess', function () {
eventEmitted = true;
done();
});
this.scope.$broadcast('fetchData');
rootscope.$apply();
eventEmitted.should.be.true;
});
没有必要监视$broadcast事件,AngularJS的$on
监听器就足够了。
- 在指令控制器中使用$attrs时出现问题
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 从控制器返回后Ajax启动事件激发
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 如何在单击复选框后调用控制器方法
- 在控制器和数据对象之间同步数据
- 将Javascript数组发送到控制器ASP.NET MVC
- 角度控制器结构
- 如何在Jquery中发布后将值从视图返回到控制器
- 将值从html传递到AngularJS控制器
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- 服务如何知道注入它的控制器何时被破坏
- 在没有自己的控制器的情况下使用指令作用域何时合适
- Ember.js:控制器何时可以访问模型
- 检测angularjs路径控制器何时超出范围
- Flux架构——如何在控制器中知道来自action的异步事件何时完成
- 在控制器中调用渲染后,何时调用下一行?Yii - PHP
- 在angularjs中何时使用指令、何时使用服务以及何时使用控制器
- 在$promise中使用$broadcast, mocha如何知道事件何时在控制器$scope中触发?
- 如何使用AngularJS/Firebase建模数据-何时使用控制器?