【问题标题】:JHipster Karma tests : error : No provider for JhiParseLinks! in spec/entry.tsJHipster Karma 测试:错误:没有 JhiParseLinks 的提供者!在规范/entry.ts
【发布时间】:2018-01-25 16:06:45
【问题描述】:

我是一个初学者,我正在使用 Angular 4.3.2 开发一个项目,该架构是使用 JHipster 构建的。 我找到了带有示例测试的测试文件夹。它们在我的代码之前成功运行。我正在尝试为我创建的组件编写单元测试,但是当我执行测试时,我有这个错误:

Error: No provider for JhiParseLinks! in spec/entry.ts (line 2923)
    _throwOrNull@webpack:///node_modules/@angular/core/@angular/core.es5.js:2649:0 <- spec/entry.ts:2923:45
    _getByKeyDefault@webpack:///node_modules/@angular/core/@angular/core.es5.js:2688:0 <- spec/entry.ts:2962:37
    _getByKey@webpack:///node_modules/@angular/core/@angular/core.es5.js:2620:0 <- spec/entry.ts:2894:41
    get@webpack:///node_modules/@angular/core/@angular/core.es5.js:2489:0 <- spec/entry.ts:2763:30
    resolveNgModuleDep@webpack:///node_modules/@angular/core/@angular/core.es5.js:9475:0 <- spec/entry.ts:9749:28
    get@webpack:///node_modules/@angular/core/@angular/core.es5.js:10557:0 <- spec/entry.ts:10831:34
    resolveDep@webpack:///node_modules/@angular/core/@angular/core.es5.js:11060:0 <- spec/entry.ts:11334:48
    createClass@webpack:///node_modules/@angular/core/@angular/core.es5.js:10924:0 <- spec/entry.ts:11198:42
    createDirectiveInstance@webpack:///node_modules/@angular/core/@angular/core.es5.js:10744:21 <- spec/entry.ts:110

这是我的测试类,它建立在与 Jhipster 生成的其他测试类相同的模型上:

import {async, ComponentFixture, TestBed} from '@angular/core/testing';
import {UserMgmtComponent} from '../../../../../../main/webapp/app/admin';
import {UserService} from '../../../../../../main/webapp/app/shared';
import {Observable} from 'rxjs/Rx';
import {User} from '../../../../../../main/webapp/app/shared';
import {ActivatedRoute} from "@angular/router";
import {MockActivatedRoute} from "../../../helpers/mock-route.service";
import {DatePipe} from "@angular/common";
import {JhiDataUtils, JhiEventManager} from "ng-jhipster";

describe('Component Tests', () => {
        describe('UserManagementComponent', () => {
            let fixture: ComponentFixture<UserMgmtComponent>;
            let comp: UserMgmtComponent;
            let service: UserService;

            beforeEach(async(() => {
                TestBed.configureTestingModule({
                    declarations: [UserMgmtComponent],
                    providers: [
                        UserService,
                        JhiDataUtils,
                        DatePipe,
                        {
                            provide: ActivatedRoute,
                            useValue: new MockActivatedRoute({id: 123})
                        },
                        JhiEventManager
                    ]
                }).overrideTemplate(UserMgmtComponent, '')
                    .compileComponents();
            }));

            beforeEach(() => {
                fixture = TestBed.createComponent(UserMgmtComponent);
                comp = fixture.componentInstance;
                service = fixture.debugElement.injector.get(UserService);
            });

            describe('OnInit part', () => {
                it('Should call load all on init', () => {
                    spyOn(service, 'find').and.returnValue(Observable.of(new User(10)));
                    comp.ngOnInit();
                    expect(service.find).toHaveBeenCalledWith(123);
                });
            });
        });
    });

这里是entry.ts的代码:

    import 'core-js';
import 'zone.js/dist/zone';
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/proxy';
import 'zone.js/dist/jasmine-patch';
import 'rxjs';
import 'intl/locale-data/jsonp/en-US.js';
import { TestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';

TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());

declare let require: any;
const testsContext: any = require.context('./', true, /\.spec/);
testsContext.keys().forEach(testsContext);

有人遇到过这个错误吗?

【问题讨论】:

    标签: javascript angular unit-testing karma-jasmine jhipster


    【解决方案1】:

    您的 TestBed.configureTestingModule() 调用在 arg 对象中缺少 imports 属性,该属性导入在 test.module.ts 中定义的模块并声明许多服务的提供者,包括 JhiParseLinks

    如果您的应用名为“MyApp”,则应添加以下行:

    import { MyAppTestModule } from '../../../test.module';
    
            TestBed.configureTestingModule({
                imports: [MyAppTestModule],
    

    【讨论】:

      猜你喜欢
      • 2017-02-21
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多