2

我知道 Angular 的 e2e 测试对单独的测试有一个 beforeEach ......但我正在寻找整个套件的升级。有人知道在执行整个测试套件之前运行代码块的方法吗?

4

2 回答 2

3

我需要这样做来运行一堆需要用户登录的测试,所以我创建了一个karma.suiteInitialize.js包含以下代码的文件:

(function() {
    'use strict';

    angular
        .module("app")
        .run(testInitialize);

    testInitialize.$inject = ['userService'];

    function testInitialize(userService) {
        userService.setUser({ UserName: 'Test user'});
        // if (userService.isLogged())
        //     console.log("Test user logged in");
    }
})();

然后将其添加到karma.config.js应用程序文件之后,例如:

    files: [
        '../Scripts/angular.js',
        '../Scripts/angular-mocks.js',
        '../Scripts/angular-route.js',
        '../Scripts/angular-filter.js',
        '../Scripts/angular-resource.js',
        '../Scripts/angular-scroll.min.js',
        'app/app.module.js',
        'app/**/*.js',
        'karma.suiteInitialize.js',
        'tests/**/*.js',
        'app/**/*.html'
    ]

..这就是全部。这不会减少登录用户的调用次数(每次测试都会发生这种情况),但确实很方便。

于 2015-05-29T14:58:39.823 回答
1

如果您不介意为套件中的每个测试运行该块,您可以嵌套您的测试并beforeEach在最高级别拥有一个,例如,

describe("Entire Suite", function() {

  beforeEach(function(){
    // Executed for every it in the entire suite
  });

  it('Test', function() {
    // Only the first beforeEach will be called prior to this test.
  });

  describe("Subset Suite", function(){

    beforeEach(function(){
      // Executed for every it in this subset suite
    });

    it('Subtest', function() {
      // Both beforeEach blocks will have been called prior to this test.
    });
});

但是,main beforeEach 将在整个套件中的每个 it 块之前执行。如果您希望代码只执行一次,那么这不是您的解决方案。

于 2013-09-11T16:59:44.620 回答