使用实习生编写一系列功能测试,我试图使用before和after方法清除所有cookie和本地存储的数据,以便每个测试开始清理。
这是我正在尝试使用的cleanEnvironment函数,位于名为utils
的模块中:
cleanEnvironment: function(name) {
name = name || 'NONE';
// window params
var defaultHeight = 768;
var defaultWidth = 1024;
if (this.remote.environmentType.webStorageEnabled === true) {
this.remote
.clearSessionStorage()
.clearLocalStorage();
}
return this.remote
.setWindowSize(defaultWidth, defaultHeight)
.getCookies()
.then(
function(cookies) {
console.log('in ', name);
console.log('Existing cookies that will be cleared are ', cookies);
}
)
.clearCookies()
.then(
function(cookies) {
console.log('in ', name);
console.log('Existing cookies are ', cookies);
}
);
},
以下是我试图在之前/之后的方法中调用它的方法:
after: function() {
console.log('timestamp for login after start is ', Date.now());
utils.cleanEnvironment.call(this, 'login before');
console.log('timestamp for login after finish is ', Date.now());
},
我终于意识到(并重读了说这个的文档)我无法确定多个套件之前和之后的顺序,因为我没有在这些模块中返回Promise。但我正在努力写一个允许我使用这个外部模块utils
的承诺,所以我不会在每个套件中重复代码。
before
/ after
方法中的承诺如何成功传递并返回对this.remote
的正确引用?我在这些方法中找不到任何promises的例子,到目前为止,我在cleanEnvironment
函数中得到错误,其中this.remote
未定义,或者浏览器从未加载测试URL,我是这意味着我永远不会解决这个承诺。
这是我的一次尝试:
after: function() {
var self = this;
return new Promise(function(resolve, reject) {
console.log('timestamp for login after start is ', Date.now());
utils.cleanEnvironment.call(self, 'login before');
console.log('timestamp for login after finish is ', Date.now());
resolve();
});
},
我确信我完全错过了一些关于Promises的明显内容,但是在盯着这段代码看了7个小时之后,我对它无论如何都是盲目的。
答案 0 :(得分:0)
命令类似于承诺,可以用于异步操作,因此您只需在cleanEnvironment
方法中返回after
函数的结果。
after: function () {
return utils.cleanEnvironment(...)
}
您还应该注意在cleanEnvironment
中维护单个链。在原始cleanEnvironment
中,可以启动两个单独的链,并且仅返回第二个链。如果由于某种原因第一次运行的时间比第二次要长,实习生就不会等待它完成。要保持链条连续,请执行以下操作:
var chain = this.remote;
if (this.remote.environmentType.webStorageEnabled === true) {
chain = this.remote
.clearSessionStorage()
.clearLocalStorage();
}
return chain
.setWindowSize(defaultWidth, defaultHeight)
.getCookies()
// ...