Tester for honkit plugins
npm install honkit-tester



This is a fork of gitbook-tester(https://github.com/todvora/gitbook-tester), port to honkit.
No more mocking of ``npx honkit build`! Verify your honkit-plugin against a real, up-to-date`
version of honkit. This integration framework creates a temporary book, attaches your local honkit plugin, runs npx honkit 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.
`js`
var tester = require('honkit-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:
` This text is highlighted !html`
Only the `` 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.
honkit-tester package provides a single entry point:
`js`
tester.builder()
On the builder, the following methods can be called:
Put some Markdown content into the generated book's README.md (initial/intro page).
Add another book page. For example:
`js`
.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:
`js
var cheerio = require('cheerio');
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(cheerio.load('
Second page content
')('body').html().trim());Level: how nested should be this page, optional parameter.
`0` for top level page, `1` for second, `2` for third...$3
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.$3
Attach currently tested or developed plugin to the generated gitbook files. All locally attached plugins will be automatically added
to
`book.json` in the `plugins` section.Should be called
using the following format:
`js
.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:`js
.withLocalPlugin(require('path').join(__dirname, '..'))
`$3
Arrach a user assert dir to the generated gitbook files. This assert dir will
symbolic linked to book dir, and must in the project directory.
Should be called
using the following format:
`js
.withLocalDir(path.join(__dirname, '..', 'assert_dir'))
`$3
Allows you to create a file inside the book directory. Just provide the path for the file and string content. For example:
`js
.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:
`markdown
'This text is {% include "./includes/test.md" %}'
`$3
Start a build of the book. Generates all the book resources, installs required
plugins, attaches the provided local modules. Returns
`promise`.Working with results
`js
.then(function(result) {
var index = result.get('index.html');
console.log(index);
})
`should output JavaScript object like
`js
{ path: 'index.html',
'$': [cheerio representation of the page]
content: 'test me
' }`Debugging
If you wish to see detailed output of the build and the gitbook logs, provide the ENV variable
DEBUG=true.Complete test example
How to write a simple test, using node-jasmine.
`jsvar tester = require('honkit-tester');
var cheerio = require('cheerio');
// set timeout of jasmine async test. Default is 5000ms. That can
// be too low for a complete test (install, build, expects)
jasmine.getEnv().defaultTimeoutInterval = 20000;
describe("my first honkit integration test", function() {
it('should create book and parse content', function(testDone) {
tester.builder()
.withContent('#test me \n\n!preview')
.create()
.then(function(result) {
expect(result[0].content).toEqual(cheerio.load('
test me
\n
')('body').html().trim());
})
.fin(testDone)
.done();
});
});
``This project is available under Apache-2.0 license.