我正在使用phantomjs与业力进行集成测试。如何模拟离线模式?
看来我无法更改'navigator.online'并且在phantomjs的脱机模式下找不到任何内容。
编辑:
应用程序正在将消息发送到外部位置。当浏览器离线时,它应该停止发送消息并将其存储在队列中。恢复连接后,它将发送队列中的所有消息。
我只是在检查“navigator.online”是否返回true或false。
也许有一种更好的方法来实现和测试。
任何意见,将不胜感激。
最佳答案
navigator.online
是只读属性。您的组件应具有单独的属性,因此您可以在测试中将其设置为false或true(而不是始终直接检查navigator.online
)
function Storer() {}
Storer.prototype.isOnline = true;
Storer.prototype.store = function() {
// Instead of reading navigator.isOnline
if (this.isOnline) {
this.sendAjax();
} else {
this.storeLocally();
}
}
// In your tests, you can modify isOnline
var storer = new Storer();
storer.isOnline = false;
storer.setSomething();
storer.store();
// Pseudo code here
expect(store.getLocalCache()).notToBeEmpty();
storer.isOnline = false;
store.setSomethingElse();
store.store();
// Pseudo code here
expect(storer.sendAjax).toHaveBeenCalledWith("some", "arg")
类(class):如果可以,请不要在代码中使用全局对象,这会使模拟变得更加困难。而是允许调用者对全局对象进行模拟/存根。
关于javascript - 切换navigator.online,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35703323/