Angular 5 Karma测试因进口而失败

时间:2018-06-04 20:53:36

标签: angular typescript karma-jasmine

我最近将一个项目从Angular 2迁移到了5,现在任何与编译视图有关的测试用例都在破坏。以前的测试工作已经不复存在了。

为了解决这个问题,我创建了一个非常简单的测试,试图找到正在发生的事情。

select struct.companies_id, count(people_id)
from struct
inner join people on people.companies_id in 
        (select s2.companies_id
         from struct s2
         start with s2.companies_id = struct.companies_id
         connect by prior s2.companies_id = s2.parent_companies_id)
group by struct.companies_id
order by 1
;

如果导入没有出现错误,它就不再运行测试用例。如果没有导入,它会告诉我验证Mat-Card是模块的一部分。

这是package.json(最近更新的Karma)的相关部分:

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [Component],
        imports: [MatCardModule] //Breaks if any import is here (e.g. SharedModule)
    });
    TestBed.compileComponents(); //Breaks once this is run
}));
it('should display something',
    expect("").toContain("");
});

更新

经过一番调查,我现在认为这是与Karma的配置问题。

我能够通过添加

解决MatCardModule问题
"jasmine-core": "^3.1.0",
"jasmine-spec-reporter": "^4.2.1",
"karma": "^2.0.2",
"karma-chrome-launcher": "^2.2.0",
"karma-coverage": "^1.1.2",
"karma-jasmine": "^1.1.2",
"karma-mocha-reporter": "^2.2.5",
"karma-remap-istanbul": "^0.6.0",
"karma-systemjs": "^0.16.0"

到TestBed。虽然在添加提供程序时,它可以使用不需要导入的基本类,但任何更复杂的(例如ObservableMedia)都不会起作用,即使给出了适当的导入。也不会出现错误,甚至都不会运行任何测试。

1 个答案:

答案 0 :(得分:-1)

所以经过大约一周的探索,我找到了一个对我有用的解决方案。

我最初使用 Angular Seed 作为入门项目,但这已经超过一年了。升级到Angular 5时,我在线使用了指南而不是升级Angular Seed项目。虽然它有效但并非我的所有测试用例都在运行。

我花时间将项目文件升级到最新的Angular Seed,并且在将所有其他软件包导入karma.config.js后(包含一些错误),所有测试用例都开始运行。

<强>旁注:

问题还可能是由于未将其他软件包正确导入Karma。按照this指南正确添加外部依赖项。

如果组件中有自定义元素,您可能还需要将CUSTOM_ELEMENTS_SCHEMA添加到TestBed。