我知道 Angular 的 e2e 测试对单独的测试有一个 beforeEach ......但我正在寻找整个套件的升级。有人知道在执行整个测试套件之前运行代码块的方法吗?
问问题
1141 次
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 回答