所以我使用Gulp,Gulp-Jasmine和SystemJS来测试Angular2演示应用程序。真的很简单。我设法让System.config块工作,并加载规范文件,但是当尝试运行带有以下错误的beforeEach块时,它会失败......
{[错误:TypeError:_global.beforeEach不是函数 在Object.eval(D:/ ng2demo / node_modules / angular2 / src / testing / matcher s.js:26:9) 在eval(D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 5:4) 在eval(D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 6:3) 在eval(原生) 在Object.eval(D:/ ng2demo / node_modules / angular2 / src / testing / testing 的.js:10:18) 在eval(D:/ng2demo/node_modules/angular2/src/testing/testing.js:245 :4) 在eval(D:/ng2demo/node_modules/angular2/src/testing/testing.js:246 :3) 在eval(原生) 评估D:/ng2demo/node_modules/angular2/src/testing/matchers.js 评估D:/ng2demo/node_modules/angular2/src/testing/testing.js 评估D:/ng2demo/node_modules/angular2/testing.js 加载D时出错:/ng2demo/app/assets/services/config.service.spec.js] originalErr:[TypeError:_global.beforeEach不是函数]}
我的gulp任务概述如下......
var gulp = require('gulp');
var jasmine = require('gulp-jasmine');
var System = require('systemjs');
gulp.task('newtest', () => {
System.config({
baseURL: "",
transpiler: 'typescript',
defaultJSExtensions: true,
packages: {
app: {
format: 'register',
defaultExtension: 'js'
},
},
map:{
'angular2':'node_modules/angular2',
'rxjs':'node_modules/rxjs',
},
});
Promise.all([
System.import('app/assets/services/config.service.spec'),
]).then(function(){
gulp.src(['app/assets/services/config.service.spec'])
.pipe(jasmine())
}).catch(console.error.bind(console));
});
我的spec文件看起来像这样......
/// <reference path="../../../typings/browser/ambient/systemjs/index.d.ts"/>
/// <reference path="../../../typings/browser/ambient/jasmine/index.d.ts"/>
import {Injector, provide} from "angular2/core";
import {Http, BaseRequestOptions, Response, ResponseOptions} from "angular2/http";
import {MockBackend} from "angular2/http/testing";
import {ConfigService} from "./config.service";
import {it, describe, beforeEach, inject, expect} from "angular2/testing";
describe("ConfigService", () => {
// THIS IS THE LINE THAT FAILS !!!
beforeEach(() => {
//Do some prep
});
it("it does a test and evals to true", () => {
expect(true).toBe(true);
});
});
答案 0 :(得分:0)
TypeError:_global.beforeEach不是Object.eval的函数
错误来自angular2/testing
,您可以look at the source查看原因。它试图从全局对象中导入beforeEach
并且它不存在。导入jasmine不会有帮助,因为在node.js中加载时,它不会改变全局对象。
如何通过此错误???
好吧,我建议有几种方法。如果您打算在Web浏览器中运行此代码,我建议您在浏览器中而不是在节点中测试代码。
Chrome
,但如果您愿意,可以将其更改为PhantomJS
。这很好用,我上周刚刚为angular1应用做了这个。我是否需要规范顶部的参考路径或是否有更好的方法?
自从Typescript 1.5以来,有一种更好的方法,我全心全意地推荐它。将tsconfig.json file添加到项目的根目录中。当然,这已经在我上面链接的angular2种子中为你完成了。