Socket
Socket
Sign inDemoInstall

require-inject

Package Overview
Dependencies
1
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    require-inject

A simple mock injector compatible needing no instrumentation in the libraries being tested


Version published
Weekly downloads
21K
increased by7.38%
Maintainers
1
Install size
17.0 kB
Created
Weekly downloads
 

Changelog

Source

1.4.4 (2018-12-25)

Bug Fixes

  • loaded: Ensure mocked module’s loaded state is set. (#17) (25cac11)

Readme

Source

require-inject

A simple mock injector compatible needing no instrumentation in the libraries being tested

Example

var requireInject = require('require-inject');

var mymod = requireInject('mymod', {
    'fs': {
        stat: function (file,cb) {
            switch (file) {
            case 'testfile1': return cb(null,{})
            case 'testfile2': return cb(new Error('ENOENT'))
            }
        }
    }
})

var myglobal = requireInject.installGlobally('myglobal', { … })

Usage in your tests

  • var mymod = requireInject( module, mocks )

module is the name of the module you want to require. This is what you'd pass to require to load the module from your script. This means that for relative paths, the path should be relative to your test script, not to the thing you're injecting dependencies into.

mocks is an object with keys that are the names of the modules you want to mock and values of the mock version of the objects.

requireInject makes it so that when module is required, any of its calls to require for modules inclued in mocks will return the mocked version. It takes care to not impact any other uses of module, any calls to require for it will get a version without mocks.

  • var mymod = requireInject.withEmptyCache(module, mocks)

As with requireInject but your require cache will be cleared before requring the module to have mocks injected into it. This can be useful when your test shares dependencies with the module to be mocked and you need to mock a transitive dependency of one of those dependencies. That is:

Test → A → B

ModuleToTest → A → MockedB

If we we didn't clear the cache then ModuleToTest would get the already cached version of A and the MockedB would never be injected. By clearing the cache first it means that ModuleToTest will get it's own copy of A which will then pick up any mocks we defined.

Previously to achieve this you would need to have provided a mock for A, which, if that isn't what you were testing, could be frustrating busy work.

  • var myglobal = requireInject.installGlobally( module, mocks)

As with requireInject, except that the module and its mocks are left in the require cache and any future requires will end up using them too. This is helpful particularly in the case of things that defer loading (that is, do async loading).

  • var myglobal = requireInject.installGlobally.andClearCache(module, mocks)

As with requireInject.installGlobally but clear the cache first as with requireInject.withEmptyCache. Because this globally clears the cache it means that any requires after this point will get fresh copies of their required modules, even if you required them previously.

Keywords

FAQs

Last updated on 25 Dec 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc