0

在我开始测试我的茉莉花之前,我想等到所有远程文件都加载完毕(因为我不想处理我的规范文件waitsForspyes的任何地方,但只在文件的开头)

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 Block 的代码执行只有在所有文档加载完成后才开始。

这是文件开头的代码(我假设您要将文件存储在名为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 回答