Giter Site home page Giter Site logo

Comments (2)

yuv-c avatar yuv-c commented on June 7, 2024

I've re-written my use of rewiremock, and am able to get it to mock properly:

serverFile = rewiremock.proxy(() => require('../server/src/server'), {
      '@data/utils/server-auth-client': {
        authentication: authenticationMock,
        authorization: authorizationMock
      },
      '@data/utils/queries-loader': {
        loadFromFS: mockLoadFromFS
      }
    });
    rewiremock.overrideEntryPoint(module);

Notice that loadFromFS isn't directly required by server.js, so it was unclear i should be mocking it from there.

I do have another question - Is it possible to proxy(() => '../server/src/server'), {mockA} inside before function, and then mock other requires used by '../server/src/server' later during the test?

from rewiremock.

theKashey avatar theKashey commented on June 7, 2024

Hey, sorry for quite a late answer, but it's better late that never?

History note - rewiremock supports different "models" of work in order to help migration from other libraries existing before it. rewiremock.proxy is mimicking proxyquire interface.

In short proxy(file, overrides) returns you a file with overrides 🤷‍♂️ overrides. Depending on different flags it can be direct children only, or any transitive dependency required by this file anywhere.

If you want to mocks something else in the same test you need to do const newServer = .proxy stuff again.


At the same time you can change rules a little bit and mock @data/utils/queries-loader instead of '../server/src/server'

rewiremock('@data/utils/queries-loader').with({loadFromFS: mockLoadFromFS});
const serverFile = require('../server/src/server');

In this you can do the following trick

const loaderMock = rewiremock('@data/utils/queries-loader')
  .callThrough() // pass to real file
  .dynamic() // allow changes in the future
const serverFile = require('../server/src/server');
// update mocking in the future
loaderMock.with({loadFromFS: mockLoadFromFS});

Keep in mind dynamic wraps module export in Proxy to be able to update it at runtime and some operations (assigning to a constant) can bypass it. So I cannot guarantee that it gonna work for every case.

from rewiremock.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.