【发布时间】:2014-06-26 17:55:48
【问题描述】:
据我了解,Scenario-runner 已被弃用。因此,现在您将在 Karma 中运行单元测试,并在 Protractor 中运行 e2e 测试。
对我来说,启动一个浏览器(karma)来运行你的单元测试感觉不对。我的假设正确吗?你如何测试你的 Angular 应用程序?
【问题讨论】:
标签: angularjs karma-runner protractor
据我了解,Scenario-runner 已被弃用。因此,现在您将在 Karma 中运行单元测试,并在 Protractor 中运行 e2e 测试。
对我来说,启动一个浏览器(karma)来运行你的单元测试感觉不对。我的假设正确吗?你如何测试你的 Angular 应用程序?
【问题讨论】:
标签: angularjs karma-runner protractor
在测试 Angular 时,一个相当成熟的标准是使用 phantomjs 一个无头浏览器来进行单元测试。无论您以何种方式看待它,您都需要一个 javascript 引擎启动并运行,然后才能进行测试。但是,由于没有 UI,因此使用无头浏览器要快得多。
我使用 Karma、chai 和 sinon(用于模拟)——我的开发工作流程使用 phantomjs,然后我的 CI 和发布版本使用实际的浏览器 IE、Chrome 等我在 CI 构建运行时也使用 BrowserStack。
您可以查看测试示例和 karma 配置 here
您可能希望查看 grunt / gulp 来实际管理测试过程。
在测试方面你有什么特别追求的吗?
【讨论】:
如果您想知道您的应用在不同浏览器中的表现,您需要在这些浏览器中运行它。不同的浏览器有不同的 DOM 实现、JavaScript 版本和特性等。
例如,如果您要在 Chrome 或 PhantomJS 中运行以下代码,它可以正常工作,但在 IE8 中它会失败:
var arr = [1, 2, 3]
arr.forEach(function(item) {
console.log(item);
});
forEach 在 IE8 中不可用,但在 Chrome 中可用。针对 IE8 运行代码的单元测试会捕捉到这一点,而针对 PhantomJS 的单元测试将不会捕捉到这一点。
...所以如果你想在你的开发周期中运行像 PhantomJS 这样“无头”的东西,那很好,但请确保你在构建时测试了所有你关心的浏览器(希望使用 CI)
【讨论】:
我真的不喜欢 Chrome 每次运行 Karma 时都会启动,所以我切换到 PhantomJS 并且它“静默”地工作。
【讨论】: