Typescript angular2/之前的测试不是一项功能

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

所以我使用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不是函数]}

我的吞咽任务概述如下

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};
描述(“配置服务”,()=>{
//这是失败的路线!!!
在每个之前(()=>{
//做些准备
});
它(“它进行测试并评估为真”,()=>{
期望(真),期望(真);
});
});
  • 我做错了什么,我如何克服这个错误
  • 我是否需要在规范顶部设置参考路径,还是有更好的方法
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种子中为你完成了

    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注释掉了右大括号和圆括号,根据注释编辑了上面的内容,但仍然不起作用!!!