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 条件测试用例 的相关文章

  • Kendo Angular 多选设置选定值

    我将 Kendo 多重选择与 Angular Kendo 指令和远程数据源一起使用 我试图在应用程序启动时设置所选项目 但没有成功 谁能帮帮我吗 请参阅此处的代码 JS Bin http jsbin com OkukInIc 1 edit
  • 在 for 循环中突破 Promise 块

    我有以下代码 this storeNameValidate function stores var deferred q defer console log stores for storeIndex in stores this name
  • 使用 angularjs 为多选下拉列表分配默认值

    我正在使用这个插件http dotansimha github io angularjs dropdown multiselect http dotansimha github io angularjs dropdown multisele
  • 按 Chartjs 条形图的键对对象进行分组

    我正在尝试使用 Chart js 创建条形图 我在尝试根据每个用户的状态创建分组条形图时陷入困境 这是数据 statusId 0 firstName Joe status appealed count 1 statusId 0 firstN
  • XmlHttpRequest CORS POST 发送时不带 cookie

    我有一个 Rails 服务为我的 AngularJS 前端应用程序返回数据 该服务配置为通过返回足够的标头来允许 CORS 请求 当我发出 GET 请求来接收数据时 会发送 CORS 标头 以及我之前在登录时收到的会话 cookie 您可以
  • 角度 ui 路由器的动态参数

    我想知道在更改状态并发送请求以从后端获取模板时如何包含参数 这是我的应用程序 angular module questionnaireApp ngAnimate ui router ui bootstrap config stateProv
  • 在 Angular ui-router 中更改状态而不更改浏览器历史记录

    假设我们有这样的逻辑 从状态A改变到状态B 每当我们到达状态 B 时 应用程序总是通过调用将我们重定向到状态 C state go stateC 现在我们处于状态C 我的问题是如何从状态 C 返回状态 A 考虑到状态 A 可以是我们在运行时
  • 如何使用 TypeScript 和 Angular 2 将插件添加到 ng2-ckeditor ?

    我正在尝试添加Justify插件到我的 ckeditor 但不幸的是我找不到任何关于如何将插件添加到 ng2 ckeditor 的信息 另外 我找不到任何应该添加插件的目录或配置文件 我正在使用 ng2 ckeditor1 0 6使用 Ty
  • 添加甜蜜警报 Angular js

    我是 AngularJS 的新手 我正在尝试使用来自https github com oitozero ngSweetAlert https github com oitozero ngSweetAlert 我已经将相应的脚本添加到我的in
  • 在 AngularJS 控制器之间共享数据,但共享数据来自 Ajax 调用

    我已经弄清楚如何在下面的示例中使用共享服务在两个 AngularJS 控制器之间共享数据 运行中fiddle http jsfiddle net antelopelovefan pPKzW 1 var app angular module
  • cordova.js 导致引用错误“未定义需求”

    我想用恩科尔多瓦检测设备的网络状态 然而 一旦我包括科尔多瓦 js我收到一个错误 未捕获的引用错误 未定义 require cordova js 23 我已经安装并成功运行Node js and Cordova 我已经下载并安装了恩科尔多瓦
  • 当我的网页上有一个持续时间计数器时,AngularJS 有什么帮助吗?

    我有一个使用 Angular ui router 的应用程序 当路由器设置为某种状态时 我希望将计时器设置为例如 2 小时 当它设置为另一个状态时 我想让计数器倒计时 我希望在屏幕上显示剩余时间 有谁有关于如何实现此功能的代码示例吗 如果有
  • 单元测试依赖注入

    我对茉莉花和业力是全新的 我相信我的环境设置正确 并且我能够运行非常基本的单元测试 但是一旦我尝试实例化控制器 我就会收到未知提供程序错误 并且我不确定如何调试它 我需要传入 stateProvider 依赖项吗 我在角种子示例中没有看到这
  • Angularjs 手表服务对象

    为什么我无法观看服务中的对象 我有一个简单的变量可以工作 但是一个对象不能工作 http plnkr co edit S4b2g3baS7dwQt3t8XEK p preview http plnkr co edit S4b2g3baS7d
  • Angular.js:未捕获的错误,没有模块:myapp

    我也在尝试引导 angular js 项目 这是我的index html div p Loading p div
  • Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers

    我试图通过发布请求将文件发送到我的服务器 但是当它发送时会导致错误 Access Control Allow Headers 不允许请求标头字段 Content Type 所以我用谷歌搜索了错误并添加了标题 http post rootSc
  • 从指令动态地将角度属性添加到元素

    我正在尝试构建一个指令来更改缓慢的 ajax 调用按钮上的加载状态 基本上 这个想法是为按钮元素设置一个属性 ng loading 并让指令添加其余的内容 这是html代码
  • 在角度控制器中监听文档事件

    如何捕获角度控制器中的事件 我有文档级事件 所以我需要在角度控制器中捕获事件 这可能吗 Update 我有独立的 js 文件来处理来自相机的一些操作 document addEventListener myCameraEvent handl
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J

随机推荐