So a couple things, and this might just be my confusion. Does dummy.component.html actually exist?

When you call

beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [DummyComponent] }) .compileComponents() .then(() => { fixture = TestBed.createComponent(DummyComponent); dummyComponentInstance = fixture.componentInstance; console.log('beforeEach done'); }); }));

You're basically saying "hey, I have some files I need you to fetch, that's an async operation, please compile that template and then create my fixture.

If that html file doesn't exist ... it will fail during your testbed configuration. I ask because you didn't show that file.

I dropped your code into my test project and it worked fine with an empty template. It also worked with an empty templateUrl file.

If you don't have the file yet, or you don't intend to test the file, you can save overhead costs by avoiding fixture =TestBed.createComponent(DummyComponent) all together. It's very very expensive (you're talking 800~ms vs 15ms), because it creates a lot of additional (and powerful) functionality (like compiling your template to a kind of shadow DOM, as I understand it).

If you do have a dummy.component.html file, and it has elements the dynamic module doesn't know how to interpret, then you can either import the NO_SCHEMA_ERRORS from @angular/core and put that in your configuration TestBed:

... schemas: [NO_SCHEMA_ERRORS] ...

Or you can just teach the testbed how to provide those elements (generally importing those parts. But again, that's not really your problem. Your problem seems to be dummy.component.html doesn't exist.

Hope this helps.