babel-plugin-test-export
Export private variables and functions to your tests
Last updated 2 years ago by benoitz .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install babel-plugin-test-export 
SYNC missed versions from official npm registry.

babel-plugin-test-export

Build Status

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
function appendFoo(str) {
    return str + "foo"
}

module.exports = function (str) {
    return appendFoo(str).toUpperCase()
}

mylibSpec.js (jasmine example):

const mylib = require("./mylib")

// Test private functions!
describe("appendFoo", () => {
    const { appendFoo } = mylib.__test__
    it("appends foo", () => {
        expect(appendFoo("a")).toBe("afoo")
    })
})

// Mock private functions!
describe("mylib", () => {
    it("appends foo and turn value in uppercase", () => {
        spyOn(mylib.__test__, "appendFoo")
        expect(mylib("a")).toBe("AFOO")
        expect(mylib.__test__.appendFoo).toHaveBeenCalled()
    })
})

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__.appendFoo = function appendFoo(str) {
    return str + "foo";
};

module.exports = function (str) {
    return (void 0, __test__.appendFoo)(str).toUpperCase();
};
module.exports.__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.

Current Tags

  • 1.0.0                                ...           latest (2 years ago)

4 Versions

  • 1.0.0                                ...           2 years ago
  • 1.0.0-beta.2                                ...           3 years ago
  • 1.0.0-beta.1                                ...           3 years ago
  • 1.0.0-beta.0                                ...           4 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 2
Dependencies (0)
None
Dev Dependencies (4)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |