还有许多其他问题是关于 Sinon 未能响应的问题,但它们似乎都可以通过一些普通的东西来解决,比如无效的响应数据或切换的配置选项。
我的情况如下:
在主应用程序(at /js/app/
)中,requireJS 用于加载网站应用程序模块。
对于测试(at /js/test
),requireJS 也用于加载相同的模块,但添加了Mocha、Chai和Sinon。
这是应用程序的引导test
程序:
define(
"testRunner",
["require", "chai", "module", "sinon", "mocha"],
function( require, chai, module ){
// Chai setup
assert = chai.assert;
should = chai.should();
expect = chai.expect;
// Mocha setup
mocha.setup( 'bdd' );
// tests
require(
module.config().tests,
function(){
mocha.run();
}
);
}
);
require(["testRunner"]);
module.config().tests
在requirejs.config({})
调用中定义为:
"config": {
"testRunner": {
"tests": [
"test/format",
"test/transfer"
]
}
}
当 Mocha 处理transfer
测试时,Sinon 失败,测试超时。
这是整个transfer
测试:
define(
["transfer"],
function( Transfer ){
Transfer = new Transfer();
describe( "Transfer", function(){
describe.only( "#loadSomeData", function(){
it( "should load the test data", function( done ){
var server = sinon.fakeServer.create();
server.autoRespond = true;
server.respondWith( "string" );
var async = Transfer.loadSomeData( 123 );
async.done( function( data, s, x ){
data.should.equal( "string" );
done();
});
server.respond();
});
});
});
}
);
testRunner 输出变为:
timeout of 2000ms exceeded
对于它的价值,Transfer.loadSomeData()
将返回一个promise
: jQuery 的输出或立即解决的对新对象$.ajax()
的承诺。
在任何一种情况下,响应都是一个 Ajax 包装器,它将使用响应数据进行解析。$.Deferred
Sinon 从不发出响应——Ajax 调用只是超时。
经过多次试验和错误,我将其简化为最简单的解决方案 - 仍然失败。
该解决方案在此处的 jsfiddle上。
这是怎么回事sinon
?
为什么响应永远不会被发送回调用位置(#ajax
在这种情况下是 jQuery 的)?
有错误sinon
吗?
我做错了什么,我该如何解决它以使这个示例正常工作?