Protractor/Jasmine 条件测试用例

2024-04-25

与此问题相关:如何使用 Protractor 创建条件测试用例? https://stackoverflow.com/questions/36701985/how-can-i-create-conditional-test-cases-using-protractor-- 我很好奇这些场景是否有合法的(有记录的)答案,因为我无法得到直接的答案。

虽然ignore链接问题中发布的解决方案有效,但在风格上我不喜欢它。乍一看,您似乎忽略/跳过了规范。

另外,我在上问了这个问题Gitter https://gitter.im/angular/protractor- 以下代码是不好的做法吗?

if(questionAnswer == "Yes") {
   it('should display another question', function() {
       // code
   });
}

我在 Gitter 上从 Protractor 团队的某个人那里得到的答案相当模糊:

这可能会导致不稳定的测试......我不认为有什么可以说这不是不好的做法。如果它对你有用,那就用它吧。

我对这个答案并不满意,因为他一开始就说“可能很不稳定”……这对我来说听起来不稳定。我看到的唯一替代方法是像平常一样在规范内创建条件,并创建任意断言来捕获else场景,即:

it('should display another question', function() {
    if(questionAnswer == "Yes") {
        expect(question2.isDisplayed()).toBe(true);
    }
    else {
        expect(true).toBe(true);
    }
});

但是,当只有 50% 的时间需要时,我会自动添加一个额外的测试用例。我知道这是一个小问题,但它确实困扰着我。

上面的代码是我当前面临的场景 - 如果最后一个规范回答“是”,我需要为下一个问题运行附加规范。如果没有,我的测试就结束了。难道真的没有吗official有条件地在 Jasmine/Protractor 中运行规范的方法?


在这些情况下,我使用所谓的context。通常,上下文用于表示影响您正在测试的代码的行为的状态更改。

虽然 Jasmine 中没有明确提供,但它们确实存在于其他 BDD 风格的测试框架中,例如 Rspec (相关参考 http://lmws.net/describe-vs-context-in-rspec)。经常,context只是一个别名describe.

所以在 Jasmine 中,我会使用describe并按如下方式构建我的测试:

describe('someMethod', function() {
    describe('when a privileged account', function() {
        beforeEach(function() {
           questionAnswer = "Yes";
           someMethod();
        });

        it('should do something', function() {
            // expectation
        }
    });

    describe('when not a privileged account', function() {
        beforeEach(function() {
           questionAnswer = "No";
           someMethod();
        });

        it('should do something else', function() {
            // expectation
        }
    });
);

我避免“条件测试”。我宁愿运行更多测试以确保我已经用尽了所有代码路径。此外,我发现测试更具可读性,这是 BDD 式测试的目标之一。

最后,向测试添加逻辑是人们走上测试测试的荒谬道路的原因之一。然后测试你的测试来测试测试。进而...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protractor/Jasmine 条件测试用例 的相关文章

随机推荐