angular - Mocha 测试 Angular 引用错误 : Zone is not defined

标签 angular mocha.js

我正在尝试在 Angular 4.0.0 组件上运行测试,并且我正在使用 Mocha。我收到以下错误:

var FakeAsyncTestZoneSpec = Zone['FakeAsyncTestZoneSpec'];

ReferenceError: Zone is not defined`

这是我的测试代码:

import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By }              from '@angular/platform-browser';
import { DebugElement }    from '@angular/core';
import {SocketService} from '../src/app/services/socket.service';
import 'mocha';


describe('BannerComponent (inline template)', () => {

let comp:    SocketService;
let fixture: ComponentFixture<SocketService>;
let de:      DebugElement;
let el:      HTMLElement;

beforeEach(() => {
    TestBed.configureTestingModule({
        declarations: [ SocketService ], // declare the test component
    });

    fixture = TestBed.createComponent(SocketService);

    comp = fixture.componentInstance; // BannerComponent test instance

    // query for the title <h1> by CSS element selector
    de = fixture.debugElement.query(By.css('h1'));
    el = de.nativeElement;
   });
});

我现在一直在摸不着头脑,我浏览了我能找到的每一个留言板和教程,我最好的调查已经归结为,Zone.js 没有足够快地实例化来定义 区域。我试图在我的测试代码中 import 'zone.js' 但它没有任何影响。 谁知道如何绕过或修复此错误?

最佳答案

radzen 博客设置已过时。

这是使用 mocha-webpack 插件启动测试的设置:

    require('core-js/es6');
    require('core-js/es7/reflect');
    require('zone.js/dist/zone-node');
    require('zone.js/dist/long-stack-trace-zone');
    require('zone.js/dist/proxy');
    require('zone.js/dist/sync-test');
    require('zone.js/dist/async-test');
    require('zone.js/dist/fake-async-test');

    const testing = require('@angular/core/testing');
    const browser = require('@angular/platform-browser-dynamic/testing');

    testing.TestBed.initTestEnvironment(browser.BrowserDynamicTestingModule, browser.platformBrowserDynamicTesting());

    const jsdom=  require("jsdom");
    const { JSDOM } = jsdom;

    const window = (new JSDOM('<!doctype html><html><body></body></html>')).window;
    const document = window.document;

    global.window = window;
    global.document = document;
    global.HTMLElement = window.HTMLElement;
    global.XMLHttpRequest = window.XMLHttpRequest;
    global.Node = window.Node;

我正在使用:

    Angular v4.1.1.
    Webpack v2.2.1.
    jsdom v10.1.0.
    mocha-webpack.

我写了一个线程来解释如何设置 webpack 配置以使用 Mocha、Chai 和 sinon 测试 Angular 应用程序。它适用于 Angular 4+ 版本。

http://hichambi.github.io/2016/12/27/testing-angular2-with-webpack-mocha-on-browser-and-node.html

希望对你有所帮助。

关于angular - Mocha 测试 Angular 引用错误 : Zone is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43228638/

相关文章:

javascript - 如何使用 ionic v4 项目中的代码删除 Android 应用程序缓存

Angular 2 身份验证 : logout stays in the user page

testing - Angular2 RC4 测试 : Uncaught (in promise): TypeError: testing_1. expect(...).toBeAnInstanceOf 不是函数

Angular 8 APP_INITIALIZER 服务在加载配置文件之前启动

mocha.js - 将 JSHint 与 Mocha 和 Chai 结合使用

javascript - JavaScript 数组克隆相等断言中的奇怪行为

javascript - Mocha "describe"未定义

angular - 从可观察数组获取最新的订阅响应 - Angular 7

testing - 用 enzyme 测试 react 组件与上下文 : return an empty object

node.js - 使用域来测试 Node 调用堆栈深处抛出的错误。