【发布时间】:2012-02-01 02:06:44
【问题描述】:
我正在编写我的第一个 jquery 插件。它严重依赖于对服务器的 ajax 调用。通常,插件中的 ajax 调用将按照标准异步运行。
我正在使用 qunit 进行测试。我的第一次尝试以经典方式失败:
test ('check asynchronous call', function ()
{
stop();
$.my_plugin('do asynchronous call');
start();
equal('expected val', var_set_after_async_call_finishes,
'async var set as expected?');
})
也就是说,“equal”在异步调用完成之前运行。
看来我可以通过两种方式修改插件代码:
- 直接在插件中嵌入“start()”(但这会使它与不应在生产环境中运行的代码混淆)
- 向 my_plugin 添加一个可选参数,强制 $.ajax 同步运行。
我采用了第二种方法,向 my_plugin 添加了一个可选参数,当设置为 false 时,它会同步运行 ajax 函数。然后我将测试修改为:
test ('check asynchronous call', function ()
{
async = false;
$.my_plugin('do asynchronous call', async);
equal('expected val', var_set_after_async_call_finishes,
'async var set as expected?');
})
这行得通。
但是有没有办法可靠地测试插件而无需以任何方式修改其代码?
【问题讨论】:
-
是的,尝试使用Selenium
标签: javascript jquery unit-testing asynchronous qunit