【问题标题】:Unit testing in AngularAngular 中的单元测试
【发布时间】:2014-06-26 17:55:48
【问题描述】:

据我了解,Scenario-runner 已被弃用。因此,现在您将在 Karma 中运行单元测试,并在 Protractor 中运行 e2e 测试。

对我来说,启动一个浏览器(karma)来运行你的单元测试感觉不对。我的假设正确吗?你如何测试你的 Angular 应用程序?

【问题讨论】:

    标签: angularjs karma-runner protractor


    【解决方案1】:

    在测试 Angular 时,一个相当成熟的标准是使用 phantomjs 一个无头浏览器来进行单元测试。无论您以何种方式看待它,您都需要一个 javascript 引擎启动并运行,然后才能进行测试。但是,由于没有 UI,因此使用无头浏览器要快得多。

    我使用 Karma、chai 和 sinon(用于模拟)——我的开发工作流程使用 phantomjs,然后我的 CI 和发布版本使用实际的浏览器 IE、Chrome 等我在 CI 构建运行时也使用 BrowserStack。

    您可以查看测试示例和 karma 配置 here

    您可能希望查看 grunt / gulp 来实际管理测试过程。

    在测试方面你有什么特别追求的吗?

    【讨论】:

    • “事实上的标准”可能有点用词不当。这是a 标准,“defacto”(即实际标准,无论好坏)可能是一个措辞问题。 (很抱歉成为“那个家伙”,哈哈)
    【解决方案2】:

    如果您想知道您的应用在不同浏览器中的表现,您需要在这些浏览器中运行它。不同的浏览器有不同的 DOM 实现、JavaScript 版本和特性等。

    例如,如果您要在 Chrome 或 PhantomJS 中运行以下代码,它可以正常工作,但在 IE8 中它会失败:

    var arr = [1, 2, 3]
    
    arr.forEach(function(item) {
      console.log(item);
    });
    

    forEach 在 IE8 中不可用,但在 Chrome 中可用。针对 IE8 运行代码的单元测试会捕捉到这一点,而针对 PhantomJS 的单元测试将不会捕捉到这一点。

    ...所以如果你想在你的开发周期中运行像 PhantomJS 这样“无头”的东西,那很好,但请确保你在构建时测试了所有你关心的浏览器(希望使用 CI)

    【讨论】:

      【解决方案3】:

      我真的不喜欢 Chrome 每次运行 Karma 时都会启动,所以我切换到 PhantomJS 并且它“静默”地工作。

      【讨论】:

        猜你喜欢
        • 2017-11-23
        • 2021-09-25
        • 2018-12-18
        • 2021-12-23
        • 1970-01-01
        • 2020-08-08
        • 2017-04-04
        • 2019-03-24
        • 2016-12-29
        相关资源
        最近更新 更多