当前位置: 首页 > 知识库问答 >
问题:

如何访问和测试Node.js模块中的内部(非导出)函数?

薛元忠
2023-03-14
function exported(i) {
   return notExported(i) + 1;
}

function notExported(i) {
   return i*2;
}

exports.exported = exported;
var assert = require('assert'),
    test = require('../modules/core/test');

describe('test', function(){

  describe('#exported(i)', function(){
    it('should return (i*2)+1 for any given i', function(){
      assert.equal(3, test.exported(1));
      assert.equal(5, test.exported(2));
    });
  });
});

共有1个答案

訾渝
2023-03-14

rewire模块绝对是答案。

下面是我的代码,用于访问一个未导出的函数,并使用Mocha测试它。

application.js:

function logMongoError(){
  console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
}
var rewire = require('rewire');
var chai = require('chai');
var should = chai.should();


var app = rewire('../application/application.js');


var logError = app.__get__('logMongoError'); 

describe('Application module', function() {

  it('should output the correct error', function(done) {
      logError().should.equal('MongoDB Connection Error. Please make sure that MongoDB is running.');
      done();
  });
});
 类似资料:
  • 问题内容: 我试图弄清楚如何在nodejs(最好是使用mocha或jasmine)中测试内部(即不导出)功能。而且我不知道! 假设我有一个类似的模块: 和以下测试(摩卡): 有什么方法可以对功能进行单元测试而不实际导出功能,因为它不是要公开的? 问题答案: 该联控模块是绝对的答案。 这是我的代码,用于访问未导出的函数并使用Mocha对其进行测试。 application.js: test.js:

  • 问题内容: 我想知道如何访问另一个函数中的一个函数。我看到了这样的代码: 那么,还有另一种方法来调用该 函数吗?我的第二个问题是,为什么在最后一行中我不打电话? 很好的解释深表感谢。 问题答案: 不,您不能直接调用它,因为它是的局部变量。 您需要使用,因为调用时返回了函数对象。要执行此功能对象,您需要 在这里您可以直接调用它,因为您可以访问它,因为它是由函数返回的。返回的对象实际上称为 闭包, 因

  • 问题内容: 我已经在工作,但是当我尝试从其他模块调用它时,是否会不确定? app.js Consumer.js 问题答案: 由于app.js通常是应用程序中的主要初始化模块,因此通常会同时初始化Web服务器和socket.io并加载应用程序所需的其他内容。 因此,与其他模块共享的一种典型方法是将它们传递给该模块的构造函数中的其他模块。那会像这样工作: 然后,在consumer.js中: 或者,如果

  • 问题内容: 我正在尝试使用Intern测试框架来自动测试通过node.js和StrongLoop实现的简单REST API。StrongLoop提供了一个浏览器网页,我已使用该网页来验证是否已实现REST API,并且可以从Postman手动测试该API。 我尝试使用intern.js进行的第一个API测试将检索集合中媒体对象的数量。HTTP方法为GET,URL为,响应为{“ count”:2}。

  • 问题内容: 我有一个要测试使用的应用程序,但是有一些问题。我的目录结构如下: 我想测试中的和模块,然后尝试做 但是在我不能导入我的目录包。 我该如何工作? 基本上,我想从测试的应用程序与和单独的目录。 我尝试将追加到,但是当我从导入时,我仍然从unittest得到一个。 编辑:我的导入和声明是: 和回溯: 问题答案: 要做的一件非常错误的事情是在上附加一个相对路径。如果要确定路径,请进行以下操作:

  • 我想在构造函数中访问多个位置的状态值。当我在构造函数中输入console.log(this)时,我可以看到可以访问特定的值,但是当我输入console.log this.state时,我没有定义。 这就是我想象的工作方式(我想访问CSSValue中的状态): 但是,当我运行此代码: 然后我在控制台中得到这个: 但是当我将console.logconsole.log(this.state)它打印未定