作者art1 (人,原来不是人)
看板Web_Design
标题[问题] 如何撰写操作 IndexedDB 的测试程式码
时间Sun May 6 21:55:52 2018
使用的测试框架是 jasmine
开启一个请求以连接目标资料库的写法是下面这样
let myDB = {
name: test,
version: 1
}
function openDB (name, version) {
let request = indexedDB.open(name, version);
}
openDB(myDB.name, myDB.version);
要测试上面的程式码,目前主要是这样写
执行测试前先完成以下工作,但即使是在浏览器环境下,我也要先宣告一个
window.indexedDB 物件才能让我把间谍插进去
beforeEach(async () => {
let window.indexedDB = {
open: (name, version) => {}
}
spyOn(window.indexedDB, 'open'); // 为 open 函式插入间谍
await openDB(myDB.name, myDB.version); // 实际呼叫函式,并等待完成
}
测试条件写
expect(window.indexedDB.open).toHaveBeenCalled();
expect(window.indexedDB.open).toHaveBeenCalledWith(myDB.name, myDB.version);
以上是最简单的建立资料库请求测试程式码
但之後要在 openDB 函式内,为请求加上事件处理函式,就不知道该怎麽写测试程式码
把 openDB 函式改成如下
function openDB (name, version) {
let request = indexedDB.open(name, version);
request.onerror = (event) => {
console.log('error');
};
request.onsuccess = (event) => {
console.log('success');
};
request.onupgradeneeded = (event) => {
console.log('upgrade');
};
}
即使事件处理函式里面只有一行呼叫 console.log,但由於 request 是内部变数,又
必须经由触发事件才能呼叫 console.log,完全不知道该怎麽撰写相关的测试程式码
试着对 console.log 插入间谍也没用
希望有人可以指点迷津
--
「看在上帝的份上,我们不能当着孩子的面枪杀他的父亲!」
「那我们就连孩子一起干掉!」
「第一枪打中的是那个天真的孩子,第二枪是抱着孩子的母亲。第三枪
停顿了三秒,当难以致信的父亲擦拭着脸上爱子的脑浆从震惊中醒转
过来,慢慢的转头看向停车的地方,分辨出是谁在攻击他後,第三颗
子弹才将他的脑壳打飞。」 ─摘自〈狼群〉
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.47.166.182
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1525614956.A.9A0.html
1F:推 zeSil: 包成promise 05/07 09:48