babel-plugin-test-export
Export private variables and functions to your tests. Annotate variable and function declarations
with a // @test-export
comment and they will be exported in a __test__
property of the module.
Use values exported like this to write more focused tests or to mock things.
Install
$ yarn add --dev babel-plugin-test-export
Make sure to add this plugin only for tests. Example, in your .babelrc
:
// ... your common configuration ... env: test: plugins: "test-export"
Example
mylib.js
:
// @test-export { return str + "foo"} module { return }
mylibSpec.js
(jasmine
example):
const mylib = // Test private functions! // Mock private functions!
How it works
All references of the annotated variables and functions are rewritten to use the exported reference instead. The above example is rewritten as:
const __test__ = {}; // @test-export__test__ { return str + "foo";}; module { return void 0 __test__appendFoostr;};moduleexports__test__ = __test__
Drawbacks
- Currently, it only works with commonjs exported modules.
- Function and variable declarations are not hoisted anymore, so make sure to always write declarations before using them.
Inspiration and thanks
I used babel-strip-test-code as a start to write
this plugin. Its goal is quite similar: export private values via a export __test__ = { ... }
and
it will strip this export for you in production. This approach, while quite simpler than mine,
is a bit more verbose and doesn't allow mocks.