Angular e2e/Karma — Перед блокировкой Suite?

Я знаю, что в тестах e2e для angular есть beforeEach для отдельных тестов... но я ищу уровень для всего набора. Кто-нибудь знает способ запустить блок кода до того, как будет выполнен весь набор тестов?


person OnResolve    schedule 10.09.2013    source источник


Ответы (2)


Мне нужно было сделать это, чтобы запустить кучу тестов, требующих входа пользователя в систему, поэтому я создал файл 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'
    ]

..и это было все, что нужно. Это не уменьшает количество вызовов для входа пользователя в систему (это все еще происходит для каждого теста), но делает его удобным.

person tarrball    schedule 29.05.2015

Если вы не возражаете против запуска блока для каждого теста в вашем наборе, вы можете вложить свои тесты и иметь 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 во всем наборе. Если вы хотите, чтобы код выполнялся только один раз, то это не решение для вас.

person lorcan    schedule 11.09.2013