0

waitsForジャスミンのテストを開始する前に、すべてのリモート ファイルがロードされるまで待ちたいと思います (specfile のどこでも,を処理したくないためspyes、ファイルの先頭でのみ)

loadDocリモートファイルをロードするために作成した関数です

loadDoc = function(path, callBack, noDocx) {
var xhrDoc;

if (noDocx == null) {
  noDocx = false;
}
xhrDoc = new XMLHttpRequest();
docxCallback[path] = callBack;
xhrDoc.open('GET', "../examples/" + path, true);
if (xhrDoc.overrideMimeType) {
  xhrDoc.overrideMimeType('text/plain; charset=x-user-defined');
}
xhrDoc.onreadystatechange = function(e) {
  if (this.readyState === 4 && this.status === 200) {
    window.docXData[path] = this.response;
    if (noDocx === false) {
      window.docX[path] = new DocxGen(this.response);
    }
    return docxCallback[path]();
  }
};
return xhrDoc.send();
};

テスト:

describe("DocxGen", function() {
var globalcallBack;
globalcallBack = jasmine.createSpy();
loadDoc('imageExample.docx', globalcallBack);
loadDoc('image.png', globalcallBack, true);
....
waitsFor(function() {
  return globalcallBack.callCount >= 10;
});



describe(...)
....
})
4

1 に答える 1

0

この問題を解決するために、同期 Ajax リクエストを使用して、Jasmine ブロックのコード実行がすべてのドキュメントが読み込まれた後でのみ開始されるようにしました。

ファイルの先頭にある私のコードは次のとおりです (ファイルをfileLoaded.

window.fileLoaded=[]

DocUtils.loadDoc= function(path)
{
    xhrDoc = new XMLHttpRequest();
    xhrDoc.open('GET', path, false); //This line makes the call asynchronous (the false)
    xhrDoc.onreadystatechange = function(e) {
        if (this.readyState === 4) {
                if (this.status === 200) {
                    window.fileLoaded[path]=this.response;
                } 
                else {
                    console.log('error loading doc');
                    if (callback != null) {
                    return callback(true);
                }
            }
        }
    };
    xhrDoc.send();
}

DocUtils.loadDoc('tagExampleExpected.docx')
DocUtils.loadDoc('tagLoopExample.docx')
DocUtils.loadDoc('tagLoopExampleImageExpected.docx')
DocUtils.loadDoc('tagProduitLoop.docx')
于 2013-06-14T15:18:58.320 に答える