というサービスクラスの単体テストを書いてい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;
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 はコンストラクターではありません