我目前正在编写测试量角器,我想知道是否有可能在beforeEach中的某些内容失败时取消测试执行(并返回一些有用的消息,例如“precondition failed:无法登录用户”)。 即我在beforeEach中有一些帮助方法,用于登录用户然后进行一些设置。
beforeEach:
1) login user
2) set some user properties
显然,如果第一步失败,执行第二步没有任何意义(实际上它是非常有害的,因为用户被锁定这是不好的)。我尝试添加“expect”作为第1步的一部分,但第2步仍然执行 - >新鲜的想法。
答案 0 :(得分:2)
严格回答您的问题,没有外部依赖:
beforeEach(function() {
// 1) login user
expect(1).toBe(1);
// This works on Jasmine 1.3.1
if (this.results_.failedCount > 0) {
// Hack: Quit by filtering upcoming tests
this.env.specFilter = function(spec) {
return false;
};
} else {
// 2) set some user properties
expect(2).toBe(2);
}
});
it('does your thing (always runs, even on prior failure)', function() {
// Below conditional only necessary in this first it() block
if (this.results_.failedCount === 0) {
expect(3).toBe(3);
}
});
it('does more things (does not run on prior failure)', function() {
expect(4).toBe(4);
});
因此,如果 1 失败, 2,3,4,N 将无法按预期运行。
还有jasmine-bail-fast但我不确定在每种情况发生之前它会如何表现。
答案 1 :(得分:2)
jasmine.Env.prototype.bailFast = function() {
var env = this;
env.afterEach(function() {
if (!this.results().passed()) {
env.specFilter = function(spec) {
return false;
};
}
});
};
然后打电话:
jasmine.getEnv().bailFast();
(功劳归hurrymaplelad写了一个npm就是这样,但是你不需要使用它)
答案 2 :(得分:0)
jasmine-bail-fast完全按照你所做的覆盖specFilter函数,但在afterEach上完成。所以它只会在第一次"它之后失败。运行。它不会帮助解决这个具体案例。
答案 3 :(得分:0)
使用jasmine2,我们可以将throwOnExpectationFailure
设置为true
。
例如在量角器配置中:
//protractor.conf.js
exports.config = {
//...
onPrepare: () => {
jasmine.getEnv().throwOnExpectationFailure(true);
}
};