我正在嘗試創建一個基本測試來驗證是否可以創建控制器或服務。使用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