zendesk / turtle

Headless browser testing client code against node.js applications
Apache License 2.0
3 stars 4 forks source link

What it is

Turtles handles server start/shutdown and client side test in a headless browser (mocha-headless-chrome).

This module is still work in progress.

Requirements

Usage

Allows to start multiple servers, multiple clients, with multiple templates (optional).

  var Turtle = require('turtle');

  var turtle = new Turtle(8686);

  turtle.server({
    path: __dirname + '/server/always_ok_server.js',
    args: ['--port', '4200'],
    started: /^Server started/img
  });

  turtle.template({
    name: 'myJQueryTemplate',
    scripts: [
      __dirname + '/lib/jQuery.js'
    ]
  });

  turtle.client({
      name: 'client1',
      template: 'myJQueryTemplate'
    }).
    test({
      path: __dirname + "/client",
      filter: /\.test1\.client\.js$/im
    });

  turtle.client({
      name: 'client2',
      template: 'myJQueryTemplate'
    }).
    test({
      path: __dirname + "/client/global_variable.test2.client.js"
    });

  turtle.run();

Turtle([port])

This is the main test runner. It serves the test files on the port given in parameter. Default is 8686.

turtle.server(options)

parameters

options:Object

turtle.client(options)

parameters

Creates and returns the new client for chaining.

A Client is an instance of headless browser. There is always one default client. Each client is started in a forked process. They are independent and there is no guaranty that they will run at exactly the same time.

turtle.template(options)

A template is a HTML wrapper that embeds tests. It should include all the javascript libraries that are needed by the tests.

In the background, turtle will generate the test file in the tmp directory of your OS. This file is automatically deleted when turtle is done.

Templates are tied to a client. If you define only one template, every client will use the same template but you could declare a different template for each client.

Turtle automatically embeds mocha and uses the 'bdd' test format.

parameters

definition:Object
override:String

The name of a template to override. Any file added will be appended to the already defined ones.

example

  turtle.template({
    name: 'templateName',
    css: [
      'maybe/a/path/to/mocha.css'
    ],
    scripts: [
      '../path/to/my/included/library.js',
      './another/path/to/another/lib.js'
    ]
  })

Then the override:

  turtle.template({
    name: 'overridenTemplateName',
    override: 'templateName',
    scripts: [
      './another/path/to/another/lib.js'
    ]
  })

turtle.stayUpWhenDone()

Keep the turtle file server running after the tests are done.

turtle.export(module)

Exports itself to the module passed in parameter. It allows to reuse templates and server definitions. See the tests for an example.

turtle.run([callback])

Effectively run the tests.

parameters

callback (optional)

The callback takes one argument which is an exit code. If zero, all tests are successful. If different than zero, at least one of the tests failed.

When no callback is defined the process will exit with an exit code different than zero if there is a test failure.

Client

client.test(options)

Add one or several tests to the current client.

parameters

options:Object

Do not delete the html test files after the tests have ended. Using this will output the path of the test files in the console.

Migration to the new turtle

0.3.0

TODO

Copyright and License

Copyright 2013, Zendesk Inc. Licensed under the Apache License Version 2.0, http://www.apache.org/licenses/LICENSE-2.0