摩卡testing与inheritance的JavaScript

我是Mocha和Node的新手,但是尝试在一些JavaScript类上写一些Mochatesting。

我有以下class级:

function FormField() { } FormField.prototype.sanitizeFieldValue = function(value) { if (value == null || value.replace == null) { return null; } return value .replace(/&nbsp;/g, " ") .replace(/&/g, '&amp;') .replace(/\\/g, '\\\\') .replace(/'/g, "\\'") .replace(/</g, '&lt;') .replace(/>/g, '&gt;') .replace(/"/g, '&quot;') .replace(/[\n\r]+/g, " "); }; module.exports = FormField; 

当我在这个文件上运行我的摩卡testing时,一切正常,testing通过。

 var expect = require("chai").expect; var formfield = require("FormField"); describe("new Form Field Tests", function() { var ff = new formfield(); describe("sanitizeFieldValue", function() { it("escapes apostrophe", function() { expect(ff.sanitizeFieldValue("'")).to.equal("\\\'"); }); }); }); 

但是,我有另一个文件引用第一个:

 TargetDateField.prototype = new FormField(); function TargetDateField() { // some functions } module.exports = TargetDateField; 

但我不知道如何testing这我已经尝试了以下,但我一直没有定义的FormField。

 var expect = require("chai").expect; var FormField = require("FormField").FormField; var targetdatefield = require("TargetDateField"); 

任何想法如何解决这个问题?

在任何你想要使用FormField地方,你都require定义它的模块….除了你的TargetDateField.js文件,你require它。 这就是为什么你得到一个错误。 你也需要在那里:

 var FormField = require("FormField"); TargetDateField.prototype = new FormField(); // etc... 

顺便说一句,我强烈build议编写代码,当你想加载其他模块是相同的包的一部分,使用相对path。 乍一看,我期望require("FormField")node_modules加载一些东西。 (就像你require("chai")