使用mocha

时间:2016-12-02 13:12:53

标签: unit-testing angular typescript mocha

我正在尝试为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'

我做错了什么?

2 个答案:

答案 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垫片等 - 静态地用在摩卡 - 或者系统中,或者你用来设置这些东西的任何东西 - 配置。