Javascript Mocha返回未定义的原型方法
我正在尝试对使用原型模式创建对象的节点模块运行一些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
"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的原型。