angular.io Web サイトで説明されているように、単純なコンポーネントをテストするために Angular TestBed を使用しようとしましたがTypeError: undefined is not an object (evaluating 'ProxyZoneSpec.assertPresent')
、外部コンポーネント テンプレートを読み込めないため、404 などのエラーが発生します。
TestBed を使用/設定せずにサンプル単体テストを作成すると、正しく動作するため、少なくとも Karma と Jasmine はプロジェクトに対して正しく設定されます。この問題は Angular TestBed に関連しています。angular.io 以外のドキュメントはありますか? これらのドキュメントに従うと、うまくいかないようです。
カルマ.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();
});
})