[Unit Testing] Mock a Node module's dependencies using Proxyquire

Sometimes when writing a unit test, you know that the module you‘re testing imports a module that you would like to observe, or at the very least mock to prevent side effects like network activity or file system operations.

For JavaScript unit tests that run in Node, we can hijack the built-in require function by using the proxyquire module, which allows us to mock one or more modules that are second-class dependencies in our unit test, replacing them with whatever we want.

This means we could replace functions with no-ops to prevent side effects, or replace them with Sinon spies to observe the inner workings of the module you‘re testing.

In this video, we‘ll demonstrate the basics of using Proxyquire to prevent and observe a file system operation.

index.js:

const fs = require(‘fs‘);

exports.writeFile = (filename, contents) => {
  fs.writeFileSync(filename, contents.trim(), ‘utf8‘);
}

For unit testing, we don‘t want to call ‘fs.writeFileSync‘, instead we want to using mock function.

const assert = require(‘assert‘);
const proxyquire = require(‘proxyquire‘);
const sinon = require(‘sinon‘);

const fsMock = {};
// In index.js file, we want to mock ‘fs‘ module with our fsMock object
const main = proxyquire(‘./index.js‘, {‘fs‘, fsMock});
describe(‘main.writeFile‘, () => {
  it(‘should write a trimmed string to the specififed file‘, () => {
    fsMock.writeFileSync = sinon.spy();
    main.writeFile(‘file.txt‘, ‘string‘);
    assert.deepEqual(fsMock.writeFileSync.getCall(0).args, [‘file.txt‘, ‘string‘, ‘utf8‘])
  })
})

[Unit Testing] Mock a Node module's dependencies using Proxyquire

原文地址:https://www.cnblogs.com/Answer1215/p/10216084.html

时间: 2024-10-10 20:59:52

[Unit Testing] Mock a Node module's dependencies using Proxyquire的相关文章

[Angular + Unit Testing] Mock HTTP Requests made with Angular’s HttpClient in Unit Tests

In a proper unit test we want to isolate external dependencies as much as possible to guarantee a reliable test outcome. Http calls represent such external dependencies. Therefore, when testing our Angular components or services that rely on data ret

Unit Testing a zend-mvc application

Unit Testing a zend-mvc application A solid unit test suite is essential for ongoing development in large projects, especially those with many people involved. Going back and manually testing every individual component of an application after every c

Unit Testing PowerShell Code with Pester

Summary: Guest blogger, Dave Wyatt, discusses using Pester to analyze small pieces of Windows PowerShell code. Note   This is a five-part series that includes the following posts: What is Pester and Why Should I Care?Learn about a new test framework

[Unit Testing] AngularJS Unit Testing - Karma

Install Karam: npm install -g karma npm install -g karma-cli Init Karam: karma init First test: 1. Add test file to the karma.conf.js: // list of files / patterns to load in the browser files: [ 'test/hello.js' ], 2. Add test file: describe('First Un

8 Principles of Better Unit Testing

结合工作中的实例,如何设计一个良好的Unit Test,不仅关系到程序的正确性,更关系到有效的缩短整个团队的开发周期(coding, build, refactoring),深刻的关系到敏捷在实际中的应用. 单元测试,是编程契约的一种重要体现.Unit Test应该相信别人会遵守契约.每个Project应该Cover住自己的行为,而不应该去测试别人的行为. Writing good, robust unit tests is not hard -- it just takes a little

[Mockito] Spring Unit Testing with Mockito

It is recommened to write unit testing with Mockito in Spring framework, because it is much faster with Spring framework test. But in case you can doing MVC, you still need to use spring framework test. In this post, we need to understand why to use

Java Unit Testing - JUnit & TestNG

转自https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaUnitTesting.html yet another insignificant programming notes...   |   HOME TABLE OF CONTENTS (SHOW) Java Unit Testing -  & TestNG 1.  Introduction to Unit Testing Framework The various type o

Node.Js学习01: Module System 以及一些常用Node Module

Node.Js学习就按照这本书的流程来. 在第7章结束与第10章结束时分别自己出一个小项目练练手.Node.Js的入门学习计划是这样. 目录:, QQ:1045642972 欢迎来索书以及讨论Node.Js. Node.Js Demo Node.Js官网提供了一个最基本的Demo Code: var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type':

Live Unit Testing

Live Unit Testing 相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的background的单元测试. 在体验之前,有几点注意事项是需要了解的: 1.目前 live unit tesing仅仅支持 C#和VB的传统.net版本,不支持.net core,当然,我觉得也不支持其他的语言,这点是暂时让我遗憾的,因为从体验的结果来看,如果能支持