Javascript Mocha返回未定义的原型方法

Javascript Mocha返回未定义的原型方法,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我正在尝试对使用原型模式创建对象的节点模块运行一些Mocha测试。代码本身运行得很好,但测试没有 下面是我要测试的代码: "use strict"; const fs = require("fs"), request = require("request"), EventEmitter = require("events").EventEmitter, util = require("util"); const FileController = function(url, pat

我正在尝试对使用原型模式创建对象的节点模块运行一些Mocha测试。代码本身运行得很好,但测试没有

下面是我要测试的代码:

"use strict";

const fs = require("fs"),
  request = require("request"),
  EventEmitter = require("events").EventEmitter,
  util = require("util");

const FileController = function(url, path) {
  EventEmitter.call(this);

  this.url = url;
  this.path = path;
};

FileController.prototype.downloadFile = function() {
  if (this.url) {
    let file = fs.createWriteStream(this.path);

    file.on("finish", function() {
      file.close(function() {
        this.emit("downloaded");
      });
    }).on("error", function(err) {
      this.handleDownloadError(err, "file-error");
    });

    // Download the file.
    request.get(this.url)
      .on("response", function(res) {
        if (res.statusCode == 200) {
          res.pipe(file);
        } else {
          fs.unlink(this.path);
        }

        this.emit("stream", res);
      })
    .on("error", function(err) {
      this.handleDownloadError(err, "request-error");
    });
  }
};

FileController.prototype.handleDownloadError = function(err, type) {
  fs.unlink(this.path);
  this.emit(type, err);
};

util.inherits(FileController, EventEmitter);

module.exports = FileController;
下面是我的测试代码的相关部分,我在其中实例化了一个对象:

beforeEach(function() {
  let url = "http://example.com/logo.png",
    path = config.downloadPath + "/cdf42c077fe6037681ae3c003550c2c5";

  fileController = new FileController(url, path);
  // Outputs 'undefined'.
  console.log(fileController.downloadFile);
});
当我调用
newfilecontroller(url,path)
时,它没有附加我附加到原型的
downloadFile
方法。相反,尝试调用该函数会给我提供
fileController.downloadFile不是函数

你有没有想过问题出在哪里


谢谢

这与摩卡咖啡无关。在定义自己的原型方法之前,需要继承

来自文档

将原型方法从一个构造函数继承到另一个构造函数中。构造函数的原型将设置为从超级构造函数创建的新对象

UPD 至于node的新版本。它现在设置好了,所以顺序不再重要了

exports.inherits = function(ctor, superCtor) {

  //...Args check

  ctor.super_ = superCtor;
  Object.setPrototypeOf(ctor.prototype, superCtor.prototype);
};

这与摩卡咖啡无关。在定义自己的原型方法之前,需要继承

来自文档

将原型方法从一个构造函数继承到另一个构造函数中。构造函数的原型将设置为从超级构造函数创建的新对象

UPD 至于node的新版本。它现在设置好了,所以顺序不再重要了

exports.inherits = function(ctor, superCtor) {

  //...Args check

  ctor.super_ = superCtor;
  Object.setPrototypeOf(ctor.prototype, superCtor.prototype);
};

啊,明白了。有趣的是,将Node从4.4.3升级到5.0.0也可以修复它。我刚查过。它利用
Object.prototype
来设置ctor.prototype的原型。啊,明白了。有趣的是,将Node从4.4.3升级到5.0.0也可以修复它。我刚查过。它利用
Object.prototype
来设置ctor.prototype的原型。