Angular2 + Jasmine测试:“非法状态:无法加载指令Foo的摘要。”

时间:2017-08-16 14:56:09

标签: angular jasmine

当我尝试使用ng test运行以下测试时,它会显示以下错误。

import { TestBed, inject } from '@angular/core/testing';

export class Foo {

}

describe('Foo', () => {

    let foo: Foo;

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                Foo
            ]
        }).compileComponents();
        foo = TestBed.createComponent(Foo).componentInstance;
    });

    it('should be created', () => {
        expect(foo).toBeTruthy();
    });
});

Error: Illegal state: Could not load the summary for directive Foo.

为什么会发生这种情况?如何让它运行?

3 个答案:

答案 0 :(得分:0)

您似乎忘记了@Component注释。试试这样:

@Component({
    template: "<div></div>"
})
class Foo {
}

当然你必须导入Component类:

import { Component } from '@angular/core';

PS:我认为您不需要从测试模块中导出Foo类。

答案 1 :(得分:0)

我有完全相同的例外,可以通过将 foo 添加到声明部分来修复它:

TestBed.configureTestingModule({
            providers: [
                Foo
            ],
            declarations: [
                Foo
            ]
        }).compileComponents();

答案 2 :(得分:0)

与@ lex82一样,你需要添加@Component,就像提到的@marco birchler一样,你需要将Foo添加到declarations列表中。

你可以编译它,但这并不是真的需要

您可以删除提供商列表,因为Foo是一个组件

import { TestBed, inject } from '@angular/core/testing';
import { Component } from '@angular/core';

@Component({template: '<div></div>'})
export class Foo { }

describe('Foo', () => {
  let foo: Foo;

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [Foo]
    });
    foo = TestBed.createComponent(Foo).componentInstance;
  });

  it('should be created', () => {
    expect(foo).toBeTruthy();
  });
});