Proxyquire, rewire, SandboxedModule, and Sinon: pros & cons

后端 未结 1 911
余生分开走
余生分开走 2021-01-30 02:45

When mocking Node dependencies, I\'ve happened upon the following libraries:

  • Proxyquire
  • Rewire
  • SandboxedModule
  • Sinon

They

1条回答
  •  生来不讨喜
    2021-01-30 03:25

    It totally feels like cheating, but since no one else is answering the question, here goes:

    • Proxyquire takes over require and lets you inject fakes anywhere in the dependency chain. For requires you don't take over and for methods you don't define for requires you do take over, it'll fall back to the original. This can be disabled with noCallThru. Thus it still loads the original, just replaces things with the things you define. Unlike Rewire and SandboxedModule, you can't define global variables for your require overloads.

    • Rewire takes over require and injects __get__ and __set__ properties into each module. If you know the private variable name, you can replace it. Think dependency injection.

    • SandboxedModule is nearly identical to Proxyquire except it runs the entire process in a new V8 vm. (There is a per-test performance cost to this approach.) It also has a nasty bug in v 1.0 that makes it fail when something you didn't replace references a native module it doesn't support. See https://github.com/robrich/sandboxed-module-graceful-fs.

    • Sinon doesn't take over require like the other 3. Rather, it's a more traditional mocking framework. Replace specified methods with fakes, or create a mock that tracks when it was called.

    0 讨论(0)
提交回复
热议问题