首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dojo和doh:测试特定主题订阅

Dojo和doh:测试特定主题订阅
EN

Stack Overflow用户
提问于 2013-02-01 19:15:14
回答 1查看 298关注 0票数 1

有谁知道如何使用doh来测试对象是否订阅了特定的主题?

我正在努力寻找任何描述这类测试的文档。

我问这个问题的原因是,当我构建我的小部件时,我订阅了一个主题。我想要有一个单元测试,用于测试小部件在构造后是否始终具有该主题订阅。

我的主题有一个私有变量,我在创建订阅时将其用作主题字符串。

举个例子,这里有一个叫做“CustomTopic”的主题:

代码语言:javascript
复制
define([], function(){

    var topicString= "topicString";

    return {
        TOPIC_STRING: function(){
            return topicString;
        }
    }
})

我的小部件中的构造函数如下所示:

代码语言:javascript
复制
constructor: function() {   
    topic.subscribe(CustomTopic.TOPIC_STRING(), function(params) {doSomething(params)});
}

因此,如果我能弄清楚如何查看小部件拥有的所有订阅,那么您就可以看到,根据私有变量值检查主题订阅是多么容易?

供参考:

Dojo 1.8 docs

Dojo's test util "doh" docs

EN

回答 1

Stack Overflow用户

发布于 2013-02-03 22:12:36

我建议,如果你的测试专注于行为而不是实现,那么你的测试将更加健壮/有用。在这种情况下,测试您的小部件是否响应主题(或者更好地说,是导致主题发布的事件,更多的是集成测试),而不是尝试捕获订阅本身,会更有意义。

当然,您可以尝试包装topic.subscribe (不好的东西),或者检查小部件的私有句柄列表(另一个不好的东西)。顺便说一句,我希望你实际上是在保存topic.subscribe返回的句柄,这样以后当对象被销毁时,你就可以删除它(之前,取消订阅)。

更好的做法是创建一个新对象,发布到该主题,然后查看是否调用了doSomething,或者是否出现了所需的结果。虽然doh不提供对侦听函数调用的支持,但dojo/方面非常适合于此目的。所以你可能会有这样的东西:

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14645099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档