我正在尝试为Angular 2应用程序实现单元测试。但我无法让它发挥作用。 由于测试运行 mocha 的使用和执行方式如下:
mocha -r ts-node/register -t 10000 ./**/*.unit.ts
考虑以下测试文件,其中我定义了两个基本上应该做同样事情的测试用例,但是没有一个工作。
shared.service.unit.ts
import { TestBed, async, inject } from '@angular/core/testing';
import { SharedService } from './shared.service';
import * as Chai from 'chai';
import 'mocha';
const expect = Chai.expect;
describe('SharedService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [SharedService],
providers: [SharedService]
});
});
it('should be an object',
inject([SharedService], (service: SharedService) => {
expect(service).to.be.an('object');
})
);
});
describe('SharedService without the TestBed', () => {
let service: SharedService;
beforeEach(() => {
service = new SharedService();
});
it('should be an object', () => {
expect(service).to.be.an('object');
});
});
第一个'SharedService'
使用Angular Testing Utility。运行它给出:
ReferenceError:未定义区域
第二个'SharedService without TestBed'
不使用任何角度代码(类似于this example from Angular 2 Testing guide)。运行它给出:
TypeError:Reflect.getMetadata不是函数
将这些行添加到测试文件后:
import 'core-js/es6';
import 'core-js/es7/reflect';
import 'zone.js/dist/zone';
两个测试用例都给出了相同的错误(来自zone.js\dist\zone.js
):
TypeError:无法读取未定义
的属性'prototype'
我做错了什么?
答案 0 :(得分:4)
得到它,只需要import 'core-js/es7/reflect'
:
import 'core-js/es7/reflect';
import 'mocha';
import * as Chai from 'chai';
let expect = Chai.expect;
import { SharedService } from './shared.service';
describe('SharedService', () => {
let service: SharedService;
beforeEach(() => {
service = new SharedService();
})
it('should be an object', () => {
expect(service).to.be.an('object');
})
});
答案 1 :(得分:0)
你需要加载所有的东西 - 角度,ngzone,元数据,es垫片等 - 静态地用在摩卡 - 或者系统中,或者你用来设置这些东西的任何东西 - 配置。