我正在使用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/

10-12 15:39