我使用Mocha来单元测试为Node编写的应用程序.js.

我想知道是否有可能对模块中尚未导出的函数进行单元测试.

Example:

我在foobar.js中定义了很多这样的函数:

function private_foobar1(){
    ...
}

function private_foobar2(){
    ...
}

以及一些导出为公共的函数:

exports.public_foobar3 = function(){
    ...
}

测试用例的 struct 如下:

describe("private_foobar1", function() {
    it("should do stuff", function(done) {
        var stuff = foobar.private_foobar1(filter);
        should(stuff).be.ok;
        should(stuff).....

显然,这是行不通的,因为private_foobar1是不出口的.

单元测试私有方法的正确方法是什么?摩卡咖啡有一些内置的方法吗?

推荐答案

如果函数不是由模块导出的,则无法由模块外的测试代码调用.这是由于JavaScript的工作方式,而Mocha本身无法绕过这一点.

在少数几个我认为测试私有函数是正确的例子中,我设置了一些环境变量,我的模块会判断这些变量,以确定它是否在测试设置中运行.如果它在测试设置中运行,那么它会导出额外的函数,我可以在测试期间调用这些函数.

"环境"这个词在这里用得不多.这可能意味着判断process.env或其他可以与模块"您正在接受测试"通信的内容.我必须这样做的例子是在RequireJS个环境中,为此我使用了module.config个.

Node.js相关问答推荐

try 使用Puppeteer抓取Twitter时数组空

运行JEST测试时找不到模块&q;错误

在Nest.Js中,如何发送带有表单数据的正文请求并应用正文请求验证.附加的文件是可选的

如何在mongodb集合中设置数据限制?

如何呈现ejs.renderFile中包含的子模板?

当API返回400状态代码时,使用Reactjs fetch获取错误消息

如何使用Next.js/Node/TS正确地上传至S3

Gulp 能否向 Docker 发出增量构建的第一次迭代完成的信号?

如何使用包含条件正确分页的 sequelize 查询?

在对象数组中的数组中嵌套 $lookup - Mongodb

只要我在后端正确验证所有内容,就可以将这些数据存储在本地存储中吗?

在 Node JS 中使用 url 链接而不是文件路径

如何为单个 mongo nodejs 驱动程序找到最佳连接池大小

TypeError:changeChecked 不是函数

Azure Function 在 2022 年 4 月 26 日禁用将用户字段设置为 HTTP 请求对象

node.js 变量不存在代码块

mongoose 模式中的嵌套对象

什么使用/尊重 .node-version 文件?

将 NodeJS 用于大型项目

node.js 示例