【发布时间】:2017-08-28 11:57:00
【问题描述】:
我尝试使用 Angular.io 网站上描述的 Angular TestBed 来测试一个简单的组件,但我收到如下错误:TypeError: undefined is not an object (evaluating 'ProxyZoneSpec.assertPresent') 和 404,因为它无法加载外部组件模板。
如果我创建一个示例单元测试,而不使用/设置 TestBed,它可以正常工作,因此至少为项目正确设置了 Karma 和 Jasmine。该问题与 Angular TestBed 有关。 除了 angular.io 还有其他文档吗?按照那些文档,它似乎不起作用。
karma.conf.js
var webpackConfig = require('./webpack/webpack.dev.js');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine'],
files: [
'./app/polyfills.ts',
'./app/**/*.spec.ts',
],
exclude: [ ],
preprocessors: {
'./app/polyfills.ts': ['webpack', 'sourcemap'],
'./app/**/*.spec.ts': ['webpack', 'sourcemap']
},
webpack: {
devtool: 'inline-source-map',
module: webpackConfig.module,
resolve: webpackConfig.resolve
},
mime: {
'text/x-typescript': ['ts', 'tsx']
},
reporters: ['progress', 'junit', 'tfs'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: false,
concurrency: Infinity
})
}
component.ts
import { Input, Component } from "@angular/core";
@Component({
selector: "user-contact",
templateUrl: "./user-contact.component.html",
styleUrls: ["./userContact.scss"],
})
export class UserContactComponent {
@Input()
public name: string;
}
component.spec.ts
import { ComponentFixture, TestBed, async } from "@angular/core/testing";
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
} from "@angular/platform-browser-dynamic/testing";
import { By } from "@angular/platform-browser";
import { DebugElement } from "@angular/core";
import { UserContactComponent } from "./user-contact.component";
// zone.js
import "zone.js/dist/proxy";
import "zone.js/dist/sync-test";
import "zone.js/dist/async-test";
// Without this import I get the following error:
// Expected to be running in 'ProxyZone', but it was not found
import "zone.js/dist/jasmine-patch";
TestBed.initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(),
);
describe("Component: user contact", () => {
let component: UserContactComponent;
let fixture: ComponentFixture<UserContactComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [UserContactComponent],
})
.compileComponents();
}));
it("should have a defined component", () => {
fixture = TestBed.createComponent(UserContactComponent);
component = fixture.componentInstance;
fixture.detectChanges();
expect(this.component).toBeDefined();
});
})
【问题讨论】:
-
您是否尝试删除调用
initTestEnvironment()的部分? -
你看到这个旧的角度问题了吗?也许这是链接:github.com/angular/angular/issues/11317
-
我遇到了类似的问题,在区域导入下方移动角度导入有帮助。
-
@BartBiczBoży:我重新安排了导入,确实奏效了。如果您从评论中创建答案,我会接受。谢谢。
标签: angular karma-webpack testbed