[英]TypeError: Name.default is not a constructor
我正在為稱為TaskService
的服務類編寫單元測試。 單元測試將注入TaskService實例,該實例的構造函數將繼續創建與NeDB的數據庫連接。 (我知道我應該模擬該連接,但是在優化它之前,我需要使單元測試正常工作)。
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 {}
我無法在此問題中應用解決方案,因為NeDB是NPM軟件包,而不是我自己的類: 錯誤:* .default不是構造函數
我完成了問題的輸入,然后偶然發現了這個github問題: https : //github.com/goatslacker/alt/issues/681
一條評論指出:
這有效:
從'alt / lib'導入Alt
var alt = new Alt();
module.exports = alt;
就我而言,我沒有使用import Datastore from 'nedb'
來import Datastore from 'nedb'
,而是刪除了導入,而是將以下內容添加到了我的構造函數中: var Datastore = require('nedb');
這解決了問題。 也必須在單元測試中將Datastore
變量添加到我的beforeEach函數中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.