我试图在我的脚本中测试异步postMessage API,它在真正的浏览器中运行良好但是为它创建测试相当复杂。 为了说明这种情况,我编写了这个简化的测试用例:
describe('calling postMessage asynchronously', function () {
var ctx;
beforeEach(function () {
jasmine.clock().install();
ctx = {
msgHandler:function() {
console.log('msgHandler');
}
};
});
afterEach(function () {
jasmine.clock().uninstall();
});
it('handles a postMessage asynchronously', function() {
window.addEventListener('message', ctx.msgHandler);
spyOnEvent('window', 'message');
spyOn(ctx, 'msgHandler');
setTimeout(function() {
window.postMessage('another bam', '*');
}, 10);
jasmine.clock().tick(11);
expect(ctx.msgHandler).toHaveBeenCalled();
});
});
现在为什么没有调用消息处理程序?
答案 0 :(得分:0)
describe('window.postMessage test', function() {
var o;
beforeEach(function(done) {
o = {
f: function() {
o.f2();
},
f2: function() {}
};
window.addEventListener('message', o.f, false);
spyOn(o, 'f2').and.callFake(function() {
done();
});
window.postMessage('another bam', '*');
});
it('works...', function() {
expect(o.f2).toHaveBeenCalled();
});
});