实习生功能测试和清除前后的cookie

时间:2016-03-10 11:37:34

标签: javascript testing promise intern

使用实习生编写一系列功能测试,我试图使用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个小时之后,我对它无论如何都是盲目的。

1 个答案:

答案 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()
    // ...