Sinon が応答しないことについて尋ねる質問は他にもたくさんありますが、それらはすべて、無効な応答データやトグルされた構成オプションなど、ありふれたことで解決するようです。
私の状況は次のとおりです。
メイン アプリケーション ( /js/app/
) では、requireJS を使用して Web サイト アプリケーション モジュールをロードします。
テストのために (で/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
価値があるのは、jQueryの出力または新しいオブジェクトへのすぐに解決されたpromiseのいずれかTransfer.loadSomeData()
を返すことです。
いずれの場合も、応答は、応答データで解決される Ajax ラッパーです。promise
$.ajax()
$.Deferred
Sinon が応答を発行することはありません。Ajax 呼び出しは単にタイムアウトします。
多くの試行錯誤の後、私はそれを可能な限り単純な解決策に減らしましたが、それでも失敗しました.
その解決策はjsfiddle hereにあります。
ここで何が起こっているのsinon
ですか?応答が呼び出し元 (この場合は
jQuery の ) に返されないのはなぜですか?
にバグはありますか?#ajax
sinon
私は何を間違っていますか? この例を機能させるにはどうすれば修正できますか?