我想在开始测试我的jasmine之前等待所有远程文件加载之前(因为我不想在我的specfile中处理waitsFor
,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(...)
....
})
答案 0 :(得分: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')