簡體   English   中英

TypeError:Name.default不是構造函數

[英]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; 
我通讀了很多類似的問題,但它們與導致此錯誤的自定義類有關。 就我而言,我試圖在Angular 4應用程序中使用非Typescript npm軟件包。 非打字稿包的導入語句總是很棘手。

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不是構造函數

我完成了問題的輸入,然后偶然發現了這個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM