我正在尝试创建一个基本测试来验证是否可以创建控制器或服务。使用Require和Typescript测试角度控制器
我的应用程序是为以下目录
app/js/app.js
我的控制器在以下目录
app/js/controllers/
这里是我的karma.conf.js文件
files: [
'Scripts/jquery-2.1.1.min.js',
'Scripts/require.js',
'Scripts/angular.js',
'Scripts/angular-mocks.js',
{ pattern: 'app/js/*.js', included: false },
{ pattern: 'app/js/**/*.js', included: false },
{ pattern: 'app/js/**/**/*.js', included: false },
{ pattern: 'app/js/**/**/**/*.js', included: false },
{ pattern: 'test/specs/**/*.js', included: false },
'test/test-main.js',
],
// list of files to exclude
exclude: [
'app/js/main.js'
],
测试 - main.js
var testFiles = [];
for (var file in window.__karma__.files) {
console.log(file);
if (/Spec\.js$/.test(file)) {
testFiles.push(file);
}
}
requirejs.config({
paths: {
// External libraries
'jquery': '../../Scripts/jquery-2.1.1.min',
'angular': '../../Scripts/angular',
'angular-mocks': '../../Scripts/angular-mocks',
'ngRoute': '../../Scripts/angular-route.min',
'angular-animate': '../../Scripts/angular-animate.min',
'angular-cookies': '../../Scripts/angular-cookies.min',
},
baseUrl: '/base/app/js',
shim: {
'angular': {
exports: 'angular',
deps: ['jquery']
},
'angular-mocks': { exports: 'angular-mocks', deps: ['angular'] },
'angular-animate': { exports: 'angular-animate', deps: ['angular'] },
'ngRoute': { exports: 'ngRoute', deps: ['angular'] },
'angular-cookies': { exports: 'angular-cookies', deps: ['angular'] },
},
// dynamically load all test files
deps: testFiles,
// we have to kickoff jasmine, as it is asynchronous
callback: window.__karma__.start
});
我加了这条线......
console.log(file)
要确保文件被加载到
window.__karma__.files
,它是。
测试生命测试/规格/
define(['angular', 'angular-mocks'], (angular, ngMock: ng.IMockStatic) => {
var module = ngMock.module;
var inject: (...fns: Function[]) => any = ngMock.inject;
describe("Create an Application", function() {
var scope, q, routeParams;
var location;
var app;
beforeEach(function() {
app = angular.module('App', []);
inject(function ($rootScope, $q: ng.IQService, $location: ng.ILocationService) {
scope = $rootScope;
q = $q;
routeParams = {};
location = $location;
});
});
it('Test Application Created', function() {
expect(true).toBe(true);
});
});
});
我的应用程序文件是这样的....
import angular = require('angular');
import angularRoute = require('angular-route');
import angularAnimate = require('angular-animate');
import ds = require('services/DataService');
var app = angular.module('app', [
'ngRoute',
'ngAnimate',
'ngCookies',
'kendo.directives',
'breeze.angular',
'ui.bootstrap'
]);
export = app;
当我尝试运行测试,我得到的错误是
未能实例化模块应用程序,原因是:模块“应用程序”不可用!您拼错了模块名称或忘记加载模块名称。
我假设它没有加载,但不知道我怎么能说。这是完成我的测试的最佳方式吗?
任何帮助,非常感谢!
非常感谢!
感谢您的输入,但在要求,我有这条线 回调测试main.js文件:窗口.__因缘__开始 这是否延迟茉莉开始到需要加载的一切? – ChrisSmathers 2014-11-06 11:52:04
您可能仍需要在Jasmine的boot.js文件中注释'env.execute();'。 – Fenton 2014-11-06 12:42:55