2016-04-28 3 views
1

Так что я использую Gulp, Gulp-Jasmine и SystemJS для тестирования демонстрационного приложения Angular2. На самом деле просто. Мне удалось получить блок System.config работать и файл спецификации для загрузки, однако он падает при попытке запустить блок beforeEach со следующей ошибкой ...angular2/testing beforeEach не является функцией

{ [Error: TypeError: _global.beforeEach is not a function at Object.eval (D:/ng2demo/node_modules/angular2/src/testing/matcher s.js:26:9) at eval (D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 5:4) at eval (D:/ng2demo/node_modules/angular2/src/testing/matchers.js:20 6:3) at eval (native) at Object.eval (D:/ng2demo/node_modules/angular2/src/testing/testing .js:10:18) at eval (D:/ng2demo/node_modules/angular2/src/testing/testing.js:245 :4) at eval (D:/ng2demo/node_modules/angular2/src/testing/testing.js:246 :3) at eval (native) Evaluating D:/ng2demo/node_modules/angular2/src/testing/matchers.js Evaluating D:/ng2demo/node_modules/angular2/src/testing/testing.js Evaluating D:/ng2demo/node_modules/angular2/testing.js Error loading D:/ng2demo/app/assets/services/config.service.spec.js] originalErr: [TypeError: _global.beforeEach is not a function] }

Моей глоток задача приводится ниже ...

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); 
    }); 
}); 
  • Что я делаю не так, как я могу получить за этой ошибкой ???
  • Нужен ли ссылочный путь в верхней части спецификации или есть лучший способ?
+0

Я предполагаю, что это не ваш фактический код, не так ли? вы закомментировали закрывающую скобку и скобки с помощью своего // Сделаем предварительный комментарий – Austin

+0

Отредактировано выше в соответствии с комментарием, но это не работает !!! – HeavenlyHost

ответ

0

TypeError: _global.beforeEach is not a function at Object.eval

ошибка исходит от angular2/testing, вы можете look at the source понять, почему. Он пытается импортировать beforeEach из глобального объекта и его не существует. Импорт жасмина не поможет, потому что при загрузке в node.js не изменяется глобальный объект.

how do I get past this error ???

Ну, я бы порекомендовал несколько способов. Если вы намереваетесь запустить этот код в веб-браузере, я бы рекомендовал протестировать код в браузере, а не в узле.

  1. Следуйте (неполному) руководству по испытаниям в angular2 docs. Это включает настройку html-файла, который вы будете использовать для запуска тестов. Это не то, что вы хотите, если планируете автоматизировать тестовый прогон с помощью gulp.
  2. Используйте this angular2 seed (или другое) в качестве модели того, как использовать Angular2, SystemJs, Jasmine и Karma вместе. Карманный бегун по умолчанию равен Chrome, но вы можете изменить его на PhantomJS, если хотите. Это работает очень хорошо, я только что сделал это для приложения angular1 на прошлой неделе.

Do I need the reference paths at the top of the spec or is there a better way ?

Там был лучший способ, так как машинопись 1.5, и я искренне рекомендую. Добавьте tsconfig.json file в корень вашего проекта. Это, конечно, уже сделано для вас в угловом семени, которое я связал выше.