【发布时间】:2013-04-26 13:05:22
【问题描述】:
我有一个 javascript 应用程序,用户可以在其中搜索位置,然后显示在地图上。位置搜索是通过对服务器应用程序的 AJAX 调用完成的。有一个组件负责此服务器通信 (searchComponent),我想对通信是否正常进行单元测试。
自定义事件的描述
我的自定义事件是一个简单的发布/订阅实现,取自 http://api.jquery.com/jQuery.Callbacks/:
var topics = {};
jQuery.Topic = function( id ) {
var callbacks,
method,
topic = id && topics[ id ];
if ( !topic ) {
callbacks = jQuery.Callbacks();
topic = {
publish: callbacks.fire,
subscribe: callbacks.add,
unsubscribe: callbacks.remove
};
if ( id ) {
topics[ id ] = topic;
}
}
return topic;
};
最重要的方法是
EVENT.publish(data)
触发事件并将数据传递给所有订阅者。EVENT.subscribe(callback)为事件订阅回调函数:只要事件被触发,回调函数就会被执行。
用例
基本的工作流程是这样的:
- 用户点击搜索按钮
- 应用程序调用
searchComponent.doSearch() -
searchComponent.doSearch()向服务器发送请求 - 服务器响应
- searchComponent 为 either
SEARCH_RESULT或SEARCH_FAILED触发 custom 事件 - 应用程序监听这两个事件并从那里继续(在地图上显示内容或产生错误消息)
SEARCH_RESULT 和 SEARCH_FAILED 是如上所述的自定义事件。
var SEARCH_RESULT = jQuery.Topic('SEARCH_RESULT');
var SEARCH_FAILED = jQuery.Topic('SEARCH_FAILED');
我想做什么?
我想测试一下 searchComponent 是否正常工作:
- 对服务器的请求是否正确?
- 是否正确处理了来自服务器的响应?
- 当我拨打无效电话时搜索是否失败?
- 服务器宕机时超时怎么办?
通常的东西。 ;)
问题(终于 ;))
如何测试这个用例?
(最好使用 js-test-driver,尽管我愿意接受有关其他 javascript 测试框架的任何建议)
【问题讨论】:
标签: javascript jquery ajax unit-testing publish-subscribe