Use Tinytest to test a Meteor application
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
test
.gitignore
.phantomRunner.js
.startTest.js
LICENSE
README.md
package.js
versions.json

README.md

Tinytest In App Meteor Package

This package has been made obsolete by a technique that requires no extra packages.

Use Tinytest to test your Meteor app, just like you would a package.

Does not use Velocity so the tests do NOT run in a mirror. You must clean up any data you create. If you would like to use Velocity with Tinytest in your app, see my numtel:velocity-tinytest package.

Installation

The tinytest package is also required. Install both using this command:

$ meteor add tinytest numtel:tinytest-in-app

Quick start

  1. Add a test to your application in any file

    Tinytest.add('test title', function(test){
      test.equal(true, true);
    });
  2. Open the Javascript console in your browser, execute runTinyTest()

Implements

runTinytest({...})

Run your tests on the server and in a PhantomJS client then output the results to the console. PhantomJS loads the application on the origin of the URL you are browsing from. For example, if your browser is at http://localhost:3000/posts/someid, PhantomJS will open http://localhost:3000 and execute the tests.

Options:

Key Description
pathPrefix Specify array of strings to narrow the range of tests to execute. For example, if your test was titled FirstPart - some test, pass ['tinytest', 'FirstPart'] to only run the tests that begin with FirstPart - .

Tinytest documentation

Since there is no official documentation for Tinytest, it may be helpful to have some here.

Test titles can be any string. Using a separator of " - " will allow running a subset of tests using the pathPrefix option.

Test Syntax:

// Synchronous test
Tinytest.add('test title', function(test){
  test.equal(true, true);
});

// Asynchronous test
Tinytest.addAsync('async test title', function(test, onComplete){
  Meteor.setTimeout(function(){
    test.equal(true, true);
    onComplete();
  }, 1000);
});

Assertions:

test.isFalse(v, msg) // if (!v)
test.isTrue(v, msg) // if(v)
test.equal(actual, expected, message)
test.notEqual(actual, expected, message)
test.length(obj, len, msg)
test.include(s, v) // s = string or object
test.isNaN(v, msg)
test.isUndefined(v, msg)
test.isNotNull(v, msg)
test.isNull(v, msg)

// expected can be:
//  undefined: accept any exception.
//  string: pass if the string is a substring of the exception message.
//  regexp: pass if the exception message passes the regexp.
//  function: call the function as a predicate with the exception.
test.throws(func, expected)

test.instanceOf(obj, klass)

test.runId() // Unique id for this test run

// Call this to fail the test with an exception. Use this to record
// exceptions that occur inside asynchronous callbacks in tests.
//
// It should only be used with asynchronous tests, and if you call
// this function, you should make sure that (1) the test doesn't
// call its callback (onComplete function); (2) the test function
// doesn't directly raise an exception.
test.exception(exception)

test.expect_fail()

Travis CI integration

Create a .travis.yml file in your app repository with the following contents:

language: node_js
node_js:
- "0.10"
before_install:
- "curl -L https://install.meteor.com | /bin/sh"
- "meteor update"
- "wget https://raw.github.com/numtel/tinytest-in-app/master/.startTest.js"
- "wget https://raw.github.com/numtel/tinytest-in-app/master/.phantomRunner.js"
# Optionally, arguments can be added to Meteor startup
# ex: node .startTest.js --port 3500
script: "node .startTest.js"

Command line interface

The Travis CI integration can be used to run Tinytest from your local command line as well.

Add these two scripts to your application: (Dot files to prevent Meteor from including them.)

$ wget https://raw.github.com/numtel/tinytest-in-app/master/.startTest.js
$ wget https://raw.github.com/numtel/tinytest-in-app/master/.phantomRunner.js

To run the tests from your application directory:

$ node .startTest.js

# Or specify any parameters to pass through when starting Meteor
$ node .startTest.js --port 3500

Notes:

  • Use nodejs command on Debian, Ubuntu systems.
  • Only one instance of Meteor may run at a time in a directory. If your app is running, you should use the in-browser interface instead.

Related packages

Run tests

$ git clone https://github.com/numtel/tinytest-in-app.git
$ cd tinytest-in-app
$ meteor test-packages ./

Open your browser to http://localhost:3000/

Open the Javascript console and run the following command:

runTinytest()

Not all the tests are expected to pass. The tests must be manually verified by checking the browser output against the console output.

License

MIT