README
Gitbook integration tests framework
No more mocking of gitbook build
! Verify your gitbook-plugin against a real, up-to-date
version of gitbook. This integration framework creates a temporary book, attaches your local gitbook plugin, runs gitbook build
and returns the parsed pages content.
All the book resources are generated and executed in a temporary directory (exact location depends on your operating system). Resources are cleaned up upon test phase.
Usage
var tester = require('gitbook-tester');
tester.builder()
.withContent('This text is {% em %}highlighted!{% endem %}')
.withBookJson({"plugins": ["emphasize"]})
.create()
.then(function(result) {
// do something with results!
console.log(result[0].content);
});
Expected output is then:
<p>This text is <span class="pg-emphasize pg-emphasize-yellow" style="">highlighted !</span></p>
Only the <section>
content of generated pages is currently returned. Do you need
to test navigation, the header of page, etc.? Let me know or send me a pull request.
Gitbook-tester package provides a single entry point:
tester.builder()
On the builder, the following methods can be called:
.withContent(markdownString)
Put some Markdown content into the generated book's README.md (initial/intro page).
.withPage(pageName, pageContent[, level])
Add another book page. For example:
.withPage('second', 'Second page content')
There is no need for specifying extensions, .md
will be automatically added.
The rendered page can be accessed later in tests. For example:
it('should add second book page', function(testDone) {
tester.builder()
.withContent('First page content')
.withPage('second', 'Second page content')
.create()
.then(function(result) {
expect(result.get('second.html').content).toEqual('<p>Second page content</p>');
})
.fin(testDone)
.done();
});
Level: how nested should be this page, optional parameter. 0
for top level page, 1
for second, 2
for third...
.withBookJson(jsObject)
Put your own book.json
content as a JS object. May contain plugins,
the plugin configuration or anything valid as described in the official documentation.
Can also be omitted.
.withLocalPlugin(path)
Attach currently tested or developed plugin to the generated gitbook. All locally attached plugins will be automatically added
to book.json
in the plugins
section.
Should be called using the following format:
.withLocalPlugin('/some/path/to/module')
If you run your tests from the dir spec
of your plugin, you should provide the
path to the root of your plugin module. For example:
.withLocalPlugin(require('path').join(__dirname, '..'))
.withFile(path, content)
Allows you to create a file inside the book directory. Just provide the path for the file and string content. For example:
.withFile('includes/test.md', 'included from an external file!')
Then you can use the file however you would like in your plugin or simply include its content in a page. For example:
'This text is {% include "./includes/test.md" %}'
.create()
Start a build of the book. Generates all the book resources, installs required
plugins, attaches the provided local modules. Returns promise
.
Working with results
.then(function(result) {
var index = result.get('index.html');
console.log(index);
})
should output JavaScript object like
{ path: 'index.html',
'