node-minibase/minibase-tests

View on GitHub
README.md

Summary

Maintainability
Test Coverage
<p align="center">
  <a href="https://github.com/node-minibase">
    <img height="250" width="250" src="https://avatars1.githubusercontent.com/u/23032863?v=3&s=250">
  </a>
</p>

# minibase-tests [![NPM version](https://img.shields.io/npm/v/minibase-tests.svg?style=flat)](https://www.npmjs.com/package/minibase-tests) [![NPM downloads](https://img.shields.io/npm/dm/minibase-tests.svg?style=flat)](https://npmjs.org/package/minibase-tests) [![npm total downloads][downloads-img]][downloads-url]

> Tests for applications built on [minibase][] or [base][]. All Base apps passes these tests.

[![code climate][codeclimate-img]][codeclimate-url] 
[![standard code style][standard-img]][standard-url] 
[![linux build status][travis-img]][travis-url] 
[![windows build status][appveyor-img]][appveyor-url] 
[![coverage status][coveralls-img]][coveralls-url] 
[![dependency status][david-img]][david-url]

## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [API](#api)
  * [suite](#suite)
- [Related](#related)
- [Contributing](#contributing)
- [Building docs](#building-docs)
- [Running tests](#running-tests)
- [Author](#author)
- [License](#license)

_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_

## Install
Install with [npm](https://www.npmjs.com/)

```
$ npm install minibase-tests --save
```

or install using [yarn](https://yarnpkg.com)

```
$ yarn add minibase-tests
```

## Usage
> For more use-cases see the [tests](test.js)

```js
const minibaseTests = require('minibase-tests')
```

## API

### [suite](index.js#L78)
> Test any app based on [minibase][] and [base][], just pass constructor as `App` argument. If it is `base` based pass `opts.isBase: true` option. When run `.runTests` it returns resolved Promise with array with length of 0 if all tests are passed. If any of the tests fails that `result` array will contain these tests - their title, index and the error. Resolved array also has `.tests` property which is the count of all tests, so easily you can do `res.tests - res.length` to find how many tests are failed, and get them by outputing `res`.

**Params**

* `App` **{Function}**: app constructor, if not a function returns rejected promise    
* `opts` **{Object}**: optional object, pass `isBase: true` for [base][] apps    
* `returns` **{Promise}**: promise if `App` not a function or instance of [Runner](./runner.js), so call `.runTests()`  

**Example**

```js
var suite = require('minibase-tests')
var Base = require('base')
var Assemble = require('assemble-core')
var Templates = require('templates')
var MiniBase = require('minibase').MiniBase

suite(Base, { isBase: true })
.runTests().then(function (res) {
  // if `res` has bigger length
  // it will contain failed tests
  console.log(res.length) // => 0
  console.log(res.tests) // => 17
})
suite(Assemble, { isBase: true })
.runTests().then(function (res) {
  console.log(res.length) // => 0
  console.log(res.tests) // => 17
})
suite(Templates, { isBase: true })
.runTests().then(function (res) {
  console.log(res.length) // => 0
  console.log(res.tests) // => 17
})

// MiniBase itself passes these tests too
suite(MiniBase).runTests().then(function (res) {
  console.log(res.length) // => 0
  console.log(res.tests) // => 17
})

function MyApp () {
  MiniBase.call(this)
}
MiniBase.extend(MyApp)

suite(MyApp).runTests().then(function (res) {
  console.log(res.length) // => 0
  console.log(res.tests) // => 17
})
```

## Related
- [assemble-core](https://www.npmjs.com/package/assemble-core): The core assemble application with no presets or defaults. All configuration is left to the implementor. | [homepage](https://github.com/assemble/assemble-core "The core assemble application with no presets or defaults. All configuration is left to the implementor.")
- [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit")
- [generate](https://www.npmjs.com/package/generate): Command line tool and developer framework for scaffolding out new GitHub projects. Generate offers the robustness… [more](https://github.com/generate/generate) | [homepage](https://github.com/generate/generate "Command line tool and developer framework for scaffolding out new GitHub projects. Generate offers the robustness and configurability of Yeoman, the expressiveness and simplicity of Slush, and more powerful flow control and composability than either.")
- [minibase-create-plugin](https://www.npmjs.com/package/minibase-create-plugin): Utility for [minibase][] and [base][] that helps you create plugins | [homepage](https://github.com/node-minibase/minibase-create-plugin#readme "Utility for [minibase][] and [base][] that helps you create plugins")
- [minibase-is-registered](https://www.npmjs.com/package/minibase-is-registered): Plugin for [minibase][] and [base][], that adds `isRegistered` method to your application to detect if plugin… [more](https://github.com/node-minibase/minibase-is-registered#readme) | [homepage](https://github.com/node-minibase/minibase-is-registered#readme "Plugin for [minibase][] and [base][], that adds `isRegistered` method to your application to detect if plugin is already registered and returns true or false if named plugin is already registered on the instance.")
- [minibase](https://www.npmjs.com/package/minibase): MiniBase is minimalist approach to Base - @node-base, the awesome framework. Foundation for building complex APIs… [more](https://github.com/node-minibase/minibase#readme) | [homepage](https://github.com/node-minibase/minibase#readme "MiniBase is minimalist approach to Base - @node-base, the awesome framework. Foundation for building complex APIs with small units called plugins. Works well with most of the already existing [base][] plugins.")
- [templates](https://www.npmjs.com/package/templates): System for creating and managing template collections, and rendering templates with any node.js template engine. Can… [more](https://github.com/jonschlinkert/templates) | [homepage](https://github.com/jonschlinkert/templates "System for creating and managing template collections, and rendering templates with any node.js template engine. Can be used as the basis for creating a static site generator or blog framework.")

## Contributing
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/node-minibase/minibase-tests/issues/new).  
Please read the [contributing guidelines](CONTRIBUTING.md) for advice on opening issues, pull requests, and coding standards.

**In short:** If you want to contribute to that project, please follow these things

1. Please DO NOT edit [README.md](README.md), [CHANGELOG.md](CHANGELOG.md) and [.verb.md](.verb.md) files. See ["Building docs"](#building-docs) section.
2. Ensure anything is okey by installing the dependencies and run the tests. See ["Running tests"](#running-tests) section.
3. Always use `npm run commit` to commit changes instead of `git commit`, because it is interactive and user-friendly. It uses [commitizen][] behind the scenes, which follows Conventional Changelog idealogy.
4. Do NOT bump the version in package.json. For that we use `npm run release`, which is [standard-version][] and follows Conventional Changelog idealogy.

Thanks a lot! :)

## Building docs
Documentation and that readme is generated using [verb-generate-readme][], which is a [verb][] generator, so you need to install both of them and then run `verb` command like that

```
$ npm install verbose/verb#dev verb-generate-readme --global && verb
```

_Please don't edit the README directly. Any changes to the readme must be made in [.verb.md](.verb.md)._

## Running tests
Clone repository and run the following in that cloned directory

```
$ npm install && npm test
```

## Author
**Charlike Mike Reagent**

+ [github/tunnckoCore](https://github.com/tunnckoCore)
+ [twitter/tunnckoCore](http://twitter.com/tunnckoCore)

## License
Copyright © 2016, [Charlike Mike Reagent](http://www.tunnckocore.tk). Released under the [MIT license](LICENSE).

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on November 17, 2016._

[base]: https://github.com/node-base/base
[commitizen]: https://github.com/commitizen/cz-cli
[minibase]: https://github.com/node-minibase/minibase
[standard-version]: https://github.com/conventional-changelog/standard-version
[verb-generate-readme]: https://github.com/verbose/verb-generate-readme
[verb]: https://github.com/verbose/verb

[downloads-url]: https://www.npmjs.com/package/minibase-tests
[downloads-img]: https://img.shields.io/npm/dt/minibase-tests.svg

[codeclimate-url]: https://codeclimate.com/github/node-minibase/minibase-tests
[codeclimate-img]: https://img.shields.io/codeclimate/github/node-minibase/minibase-tests.svg

[travis-url]: https://travis-ci.org/node-minibase/minibase-tests
[travis-img]: https://img.shields.io/travis/node-minibase/minibase-tests/master.svg?label=linux

[appveyor-url]: https://ci.appveyor.com/project/tunnckoCore/minibase-tests
[appveyor-img]: https://img.shields.io/appveyor/ci/tunnckoCore/minibase-tests/master.svg?label=windows

[coveralls-url]: https://coveralls.io/r/node-minibase/minibase-tests
[coveralls-img]: https://img.shields.io/coveralls/node-minibase/minibase-tests.svg

[david-url]: https://david-dm.org/node-minibase/minibase-tests
[david-img]: https://img.shields.io/david/node-minibase/minibase-tests.svg

[standard-url]: https://github.com/feross/standard
[standard-img]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg