gpt4 book ai didi

javascript - Dojo 和 doh : test for specific topic subscriptions

转载 作者:行者123 更新时间:2023-11-30 18:10:39 25 4
gpt4 key购买 nike

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

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

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

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

例如这里有一个名为“CustomTopic”的主题:

define([], function(){

var topicString= "topicString";

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

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

constructor: function() {   
topic.subscribe(CustomTopic.TOPIC_STRING(), function(params) {doSomething(params)});
}

所以你可以看到根据私有(private)变量值检查主题订阅是多么容易,如果我能弄清楚如何查看我的小部件拥有的所有订阅的话?

供引用:

Dojo 1.8 docs

Dojo's test util "doh" docs

最佳答案

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

当然,您可以尝试包装 topic.subscribe(坏事),或检查小部件的私有(private)句柄列表(另一个坏事)。顺便说一句,我希望您实际上保存了 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 - Dojo 和 doh : test for specific topic subscriptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14645099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com