Dojo 和 doh:测试特定主题订阅
Dojo and doh: test for specific topic subscriptions
有谁知道使用 doh 测试对象是否订阅特定主题的方法?
我正在努力寻找任何描述此类测试的文档。
我问这个问题的原因是,当我构建我的小部件时,我将其订阅到一个主题。我想有一个单元测试来测试小部件在构建后是否始终具有该主题订阅。
我的主题有一个私有变量,我在创建订阅时将其用作主题字符串。
例如,这里有一个名为"自定义主题"的主题:
define([], function(){
var topicString= "topicString";
return {
TOPIC_STRING: function(){
return topicString;
}
}
})
我的小部件中的构造函数如下所示:
constructor: function() {
topic.subscribe(CustomTopic.TOPIC_STRING(), function(params) {doSomething(params)});
}
因此,您可以看到根据私有变量值检查主题订阅是多么容易,如果我能弄清楚如何查看我的小部件具有的所有订阅?
供参考:
道场 1.8 文档
Dojo 的测试实用程序"doh"文档
我建议如果你的测试专注于行为而不是实现,它会更健壮/有用。在这种情况下,测试您的小部件是否响应主题(或者更好的是,导致主题发布的事件,以进行更多的集成测试)而不是尝试捕获订阅本身会更有意义。
当然,您可以尝试包装 topic.subscribe(坏事),或者检查小部件的私有句柄列表(另一件坏事)。顺便说一下,我希望您实际上正在保存 topic.subscribe 返回的句柄,以便您可以在以后销毁对象时删除(以前取消订阅)它。
比这些更好的是简单地创建一个新对象,发布到该主题,并查看是否调用了doSomething,或者是否发生了所需的结果。虽然 doh 不提供侦听函数调用的支持,但 dojo/aspect 是实现此目的的理想选择。所以你可能会有这样的东西:
var myWidget = new myWidget(); // presumably subscription happened,
// but we only care about later behaviour
var somethingDone = false;
aspect.after(window, "doSomething", function(){somethingDone = true;});
topic.publish(CustomTopic.TOPIC_STRING());
doh.assertTrue(somethingDone);
事实上,我假设doSomething不是一个全局方法,所以你必须正确地确定它的范围,但除此之外,这应该可以正常工作。目前 topic.publish 是同步的,所以这应该可以正常工作,但它将来可能会变得异步,在这种情况下,您需要避免在稍后阶段调用 doh.assertTrue。
- 模糊事件的Javascript测试
- 我的单元测试选项是什么
- 测试索引值是否等于某个数字的倍数
- 在localhost Dev Box上测试JSONP请求的最佳方式
- 测试数组中每个项的内容
- 测试Angular Service解决错误回调中的promise
- 使用Jest测试React Native应用程序
- 为函数代码编写测试
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何使用JS/nightwatchjs并行运行多个测试
- 使用量角器的当前url单元测试的getTitle
- 茉莉花宝石-耙茉莉花:ci dons't运行测试
- JavaScript滚动脚本-在测试中激发,而不是在开发站点上
- AngularJS指令单元测试中未定义的函数
- 一个密码测试程序,如果存在空格,它会提醒用户
- 使用 DOH 测试自定义模块
- Dojo DOH单元测试
- Javascript测试框架类似于dojo DOH
- doh测试后仍然保留Dojo小部件变量引用
- Dojo 和 doh:测试特定主题订阅