回答

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. 
    }); 
}); 

然而,主要beforeEach将执行之前它在整个套件中阻塞。如果你想让代码只执行一次,那么这不是你的解决方案。

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' 
    ] 

..而这一切都花了。这不会减少登录用户的呼叫数量(它仍然会发生在每个测试中),但它确实使其变得方便。