Typescript angular2/之前的测试不是一项功能
所以我使用Gulp、Gulp Jasmine和SystemJS来测试Angular2演示应用程序。真的很简单。我已经设法让System.config块工作并加载spec文件,但是当尝试运行beforeach块时,它会崩溃,出现以下错误 {[Error:TypeError:_global.beforeach不是函数 在Object.eval(D:/ng2demo/node_modules/angular2/src/testing/matcher s、 js:26:9) 评估时(D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 5:4) 评估时(D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 6:3) 评估时(本地) 在Object.eval(D:/ng2demo/node_modules/angular2/src/testing/testing .js:10:18) 评估时(D:/ng2demo/node_modules/angular2/src/testing/testing.js:245 :4) 评估时(D:/ng2demo/node_modules/angular2/src/testing/testing.js:246 :3) 评估时(本地) 评估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 加载数据时出错:/ng2demo/app/assets/services/config.service.spec.js] originalErr:[TypeError:\u global.beforeach不是函数]} 我的吞咽任务概述如下Typescript angular2/之前的测试不是一项功能,typescript,angular,gulp,jasmine,systemjs,Typescript,Angular,Gulp,Jasmine,Systemjs,所以我使用Gulp、Gulp Jasmine和SystemJS来测试Angular2演示应用程序。真的很简单。我已经设法让System.config块工作并加载spec文件,但是当尝试运行beforeach块时,它会崩溃,出现以下错误 {[Error:TypeError:_global.beforeach不是函数 在Object.eval(D:/ng2demo/node_modules/angular2/src/testing/matcher s、 js:26:9) 评估时(D:/ng2demo
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));
});
我的规范文件看起来像这样
/// <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);
});
});
//
///
从“angular2/core”导入{注入器,提供};
从“angular2/Http”导入{Http,BaseRequestOptions,Response,ResponseOptions};
从“angular2/http/testing”导入{MockBackend};
从“/config.service”导入{ConfigService};
从“angular2/testing”导入{it,descripe,beforeach,inject,expect};
描述(“配置服务”,()=>{
//这是失败的路线!!!
在每个之前(()=>{
//做些准备
});
它(“它进行测试并评估为真”,()=>{
期望(真),期望(真);
});
});
- 我做错了什么,我如何克服这个错误
- 我是否需要在规范顶部设置参考路径,还是有更好的方法
angular2/测试,您可以查看原因。它正在尝试从全局对象导入beforeach
,但它不存在。导入jasmine不会有帮助,因为它在node.js中加载时不会改变全局对象
我如何克服这个错误
嗯,我建议有几种方法。如果要在web浏览器中运行此代码,我建议在浏览器中而不是节点中测试代码
请遵循中的(不完整)测试指南。这涉及到设置一个html文件,用于运行测试。如果您计划使用gulp自动化测试运行,那么这不是您想要的
使用(或其他)作为如何将Angular2、SystemJs、Jasmine和Karma一起使用的模型。karma runner默认为Chrome
,但如果您愿意,可以将其更改为PhantomJS
。这很有效,我上周刚为angular1应用程序做了这个
我是否需要在规范顶部设置参考路径,还是有更好的方法
自从TypeScript1.5以来,有一种更好的方法,我衷心推荐它。在项目的根目录中添加一个。当然,这已经在我上面链接的angular2种子中为你完成了
TypeError:_global.beforeach不是Object.eval上的函数
错误来自angular2/测试,您可以查看原因。它正在尝试从全局对象导入beforeach
,但它不存在。导入jasmine不会有帮助,因为它在node.js中加载时不会改变全局对象
我如何克服这个错误
嗯,我建议有几种方法。如果要在web浏览器中运行此代码,我建议在浏览器中而不是节点中测试代码
请遵循中的(不完整)测试指南。这涉及到设置一个html文件,用于运行测试。如果您计划使用gulp自动化测试运行,那么这不是您想要的
使用(或其他)作为如何将Angular2、SystemJs、Jasmine和Karma一起使用的模型。karma runner默认为Chrome
,但如果您愿意,可以将其更改为PhantomJS
。这很有效,我上周刚为angular1应用程序做了这个
我是否需要在规范顶部设置参考路径,还是有更好的方法
自从TypeScript1.5以来,有一种更好的方法,我衷心推荐它。在项目的根目录中添加一个。当然,这在我上面链接的angular2种子中已经为您完成了。我假设这不是您的实际代码,对吗?你已经用//Do some prep comments注释掉了右大括号和圆括号,根据注释编辑了上面的内容,但仍然不起作用!!!我假设这不是你的实际代码,对吗?你已经用//Do some prep comments注释掉了右大括号和圆括号,根据注释编辑了上面的内容,但仍然不起作用!!!