我有一些使用Intern(3)运行的功能测试,测试的最后一步是进行一些清理,包括清除远程浏览器上的localStorage,并通过立即存储窗口句柄切换回原始窗口并且在测试结束之前切换回它(因此任何后续测试都不会失败,因为如果先前的测试在另一个测试结束时他们试图在关闭的窗口上运行)。但是,如果某些chaijs断言在.then()中失败,则会跳过最后的清理代码。是否有更好的方法可以对功能测试进行清理,即使某些断言失败,它仍然可以运行?
this.leadfoot.remote
.get(require.toUrl(url))
.execute(function() { return document.querySelector('#welcome').textContent})
.then(welcome => {
assert.equal(welcome, 'hello world', 'properly greeted');
})
.execute(function() {
localStorage.clear();
});
如果断言失败,它将永远不会在最后清除localStorage,如果下一个运行的测试期望localStorage为空,它也将失败。在功能测试后有更好的清理方法吗?
答案 0 :(得分:4)
使用afterEach
方法。
afterEach() {
return this.remote
.execute(function () {
localStorage.clear();
});
},
'my test'() {
return this.remote
.get(...)
.execute(...)
.then(welcome => {
assert.equal(welcome, ...);
});
}
答案 1 :(得分:0)
在我们的项目中,我们这样做:
afterEach: function() {
var command = this.remote;
if(intern.variables.currentCase && !intern.variables.currentCase.hasPassed) {
command = command.execute(function () {
localStorage.clear();
});
}
return command;
},
只有在测试失败时才会执行和本地Storage.clear():