1

というサービスクラスの単体テストを書いていTaskServiceます。単体テストは、TaskService インスタンスを挿入します。このインスタンスのコンストラクターは、NeDB への DB 接続を作成します。(この接続をモックする必要があることはわかっていますが、最適化する前に単体テストを機能させる必要があります)。

task.service.ts

import {Injectable, OnDestroy} from '@angular/core';
import {Task} from "./task.model";
import Datastore from 'nedb';

@Injectable()
export class TaskService implements OnDestroy {
  private tasks: any;

  constructor(private _logger: Logger) {
    this._logger.log("Task Service Constructor");

    this.tasks = new Datastore({filename: 'db/tasks.json'});


  }

エラーメッセージ

 TypeError: nedb_1.default is not a constructor
            at new TaskService I:/Projects/taskmelater/src/app/tasks/shared/task.service.ts:22:18)
            at _createClass I:/Projects/taskmelater/node_modules/@angular/core/@angular/core.es5.js:9529:1)
            at _createProviderInstance$1 I:/Projects/taskmelater/node_modules/@angular/core/@angular/core.es5.js:9503:1)
            at resolveNgModuleDep I:/Projects/taskmelater/node_modules/@angular/core/@angular/core.es5.js:9488:1)
            at NgModuleRef_.webpackJsonp.../../../core/@angular/core.es5.js.NgModuleRef_.get I:/Projects/taskmelater/node_modules/@angular/core/@angular/core.es5.js:10562:1)
            at TestBed.webpackJsonp.../../../core/@angular/core/testing.es5.js.TestBed.get I:/Projects/taskmelater/node_modules/@angular/core/@angular/core/testing.es5.js:819:1)
            at Function.webpackJsonp.../../../core/@angular/core/testing.es5.js.TestBed.get I:/Projects/taskmelater/node_modules/@angular/core/@angular/core/testing.es5.js:656:1)
            at UserContext.<anonymous> I:/Projects/taskmelater/src/app/tasks/shared/task.service.spec.ts:20:24)
            at ZoneDelegate.webpackJsonp.../../../../zone.js/dist/zone.js.ZoneDelegate.invoke I:/Projects/taskmelater/node_modules/zone.js/dist/zone.js:392:1)
            at ProxyZoneSpec.webpackJsonp.../../../../zone.js/dist/proxy.js.ProxyZoneSpec.onInvoke I:/Projects/taskmelater/node_modules/zone.js/dist/proxy.js:79:1)

テストランナーは行について不平を言っていthis.tasks = new Datastore({filename: 'db/tasks.json'});ます。

NeDB パッケージの index.js ファイルは次のとおりです。

index.js

var Datastore = require('./lib/datastore');

module.exports = Datastore;
私は同様の質問をたくさん読みましたが、それらはこのエラーを引き起こすカスタムクラスに関するものです。私の場合、Angular 4 アプリケーションで Typescript 以外の npm パッケージを使用しようとしています。typescript 以外のパッケージの import ステートメントは、常に正しく理解するのが難しいものです。

app.module.ts

@NgModule({
  declarations: [
    AppComponent,
    StarterComponent,
    StarterHeaderComponent,
    StarterLeftSideComponent,
    StarterContentComponent,
    StarterFooterComponent,
    StarterControlSidebarComponent,
    TasksComponent,
    TaskComponent,
    TaskFormComponent,
TaskService
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    AdminModule,
    AgGridModule,
    RouterModule,
    FormsModule

  ],
  providers: [TaskService, Logger],
  bootstrap: [AppComponent, TaskService, Logger]
})
export class AppModule {}

相談した質問:

TypeError: xxx はコンストラクターではありません

NeDB は自分のクラスではなく NPM パッケージであるため、この質問の解決策を適用できません: エラー: *.default はコンストラクターではありません

4

1 に答える 1