mfncooper / mockery

Simplifying the use of mocks with Node.js
Other
1.1k stars 60 forks source link

sub-dependencies from allowed modules throw warnings as "non-allowed" #59

Open re-jim opened 8 years ago

re-jim commented 8 years ago

Similar to #35, when using something like, say express, and registering it as allowable, I get lots of warnings about what isn't allowed. This seems like clutter

WARNING: loading non-allowed module: ./lib/express
WARNING: loading non-allowed module: events
WARNING: loading non-allowed module: merge-descriptors
WARNING: loading non-allowed module: ./application
WARNING: loading non-allowed module: finalhandler
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: tty
WARNING: loading non-allowed module: util
WARNING: loading non-allowed module: ./debug
WARNING: loading non-allowed module: ms
WARNING: loading non-allowed module: escape-html
WARNING: loading non-allowed module: on-finished
WARNING: loading non-allowed module: ee-first
WARNING: loading non-allowed module: statuses
WARNING: loading non-allowed module: ./codes.json
WARNING: loading non-allowed module: unpipe
WARNING: loading non-allowed module: ./router
WARNING: loading non-allowed module: ./route
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: array-flatten
WARNING: loading non-allowed module: ./layer
WARNING: loading non-allowed module: path-to-regexp
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: methods
WARNING: loading non-allowed module: http
WARNING: loading non-allowed module: ./layer
WARNING: loading non-allowed module: methods
WARNING: loading non-allowed module: utils-merge
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: ./lib/compat
WARNING: loading non-allowed module: buffer
WARNING: loading non-allowed module: events
WARNING: loading non-allowed module: ./lib/compat
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: array-flatten
WARNING: loading non-allowed module: parseurl
WARNING: loading non-allowed module: url
WARNING: loading non-allowed module: methods
WARNING: loading non-allowed module: ./middleware/init
WARNING: loading non-allowed module: ./middleware/query
WARNING: loading non-allowed module: parseurl
WARNING: loading non-allowed module: qs
WARNING: loading non-allowed module: ./stringify
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: ./parse
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: ./view
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: fs
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: content-disposition
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: content-type
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: array-flatten
WARNING: loading non-allowed module: send
WARNING: loading non-allowed module: http-errors
WARNING: loading non-allowed module: setprototypeof
WARNING: loading non-allowed module: statuses
WARNING: loading non-allowed module: ./codes.json
WARNING: loading non-allowed module: inherits
WARNING: loading non-allowed module: util
WARNING: loading non-allowed module: debug
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: destroy
WARNING: loading non-allowed module: fs
WARNING: loading non-allowed module: stream
WARNING: loading non-allowed module: encodeurl
WARNING: loading non-allowed module: escape-html
WARNING: loading non-allowed module: etag
WARNING: loading non-allowed module: crypto
WARNING: loading non-allowed module: fs
WARNING: loading non-allowed module: events
WARNING: loading non-allowed module: fresh
WARNING: loading non-allowed module: fs
WARNING: loading non-allowed module: mime
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: fs
WARNING: loading non-allowed module: ./types.json
WARNING: loading non-allowed module: ms
WARNING: loading non-allowed module: on-finished
WARNING: loading non-allowed module: range-parser
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: statuses
WARNING: loading non-allowed module: stream
WARNING: loading non-allowed module: util
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: etag
WARNING: loading non-allowed module: proxy-addr
WARNING: loading non-allowed module: forwarded
WARNING: loading non-allowed module: ipaddr.js
WARNING: loading non-allowed module: qs
WARNING: loading non-allowed module: querystring
WARNING: loading non-allowed module: http
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: array-flatten
WARNING: loading non-allowed module: utils-merge
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: ./router/route
WARNING: loading non-allowed module: ./router
WARNING: loading non-allowed module: ./request
WARNING: loading non-allowed module: accepts
WARNING: loading non-allowed module: negotiator
WARNING: loading non-allowed module: mime-types
WARNING: loading non-allowed module: mime-db
WARNING: loading non-allowed module: ./db.json
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: net
WARNING: loading non-allowed module: type-is
WARNING: loading non-allowed module: media-typer
WARNING: loading non-allowed module: mime-types
WARNING: loading non-allowed module: mime-db
WARNING: loading non-allowed module: ./db.json
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: http
WARNING: loading non-allowed module: fresh
WARNING: loading non-allowed module: range-parser
WARNING: loading non-allowed module: parseurl
WARNING: loading non-allowed module: proxy-addr
WARNING: loading non-allowed module: ./response
WARNING: loading non-allowed module: content-disposition
WARNING: loading non-allowed module: depd
WARNING: loading non-allowed module: encodeurl
WARNING: loading non-allowed module: escape-html
WARNING: loading non-allowed module: http
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: on-finished
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: utils-merge
WARNING: loading non-allowed module: cookie-signature
WARNING: loading non-allowed module: crypto
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: ./utils
WARNING: loading non-allowed module: cookie
WARNING: loading non-allowed module: send
WARNING: loading non-allowed module: vary
WARNING: loading non-allowed module: ./middleware/query
WARNING: loading non-allowed module: serve-static
WARNING: loading non-allowed module: encodeurl
WARNING: loading non-allowed module: escape-html
WARNING: loading non-allowed module: parseurl
WARNING: loading non-allowed module: path
WARNING: loading non-allowed module: send
WARNING: loading non-allowed module: url
agirorn commented 7 years ago

You can turn it off with this

mockery.enable({
    warnOnUnregistered: false
});
nivthefox commented 7 years ago

+1 this issue.

The problem with turning it off is that that also turns off warning on unregistered which you DON'T want.

The specific use case here is "I specifically allowed a thing; you should also allow its dependencies."

theKashey commented 7 years ago

@kkragenbrink - may be you have to try https://github.com/theKashey/rewiremock. It is inspired by mockery but does not contain issues like this. Check https://medium.com/@antonkorzunov/how-to-mock-dependency-in-a-node-js-and-why-2ad4386f6587

esrm001 commented 6 years ago

Sometimes I take the approach of registering third-party components as their own mocks, before enabling mockery, and then requiring the module under test. It is a bit like marking them as "trusted for the purpose of this test".

// selected excerpt

const fpath = '../../routes/v1/models/foo.js';
const mockery = require('mockery');

describe(`unit ${fpath}`, function() {
    let fn; // function under test

    beforeEach(function(done) {
        mockery.registerAllowable(fpath);
        mockery.registerMock('bluebird', require('bluebird'));
        mockery.registerMock('uuid', require('uuid'));
        mockery.enable({ useCleanCache: true });
        fn = require(fpath);