hubot-mockadapter

2.0.2 • Public • Published

hubot-mockadapter

mock adapter for unit-testing Webbybot and Hubot

Dependency Status npm

Rewrote from hubot-mock-adapter

An Adapter implementation could be spied on. For writing unit tests for Webbybot and Hubot scripts.

example usage

Let's assume you've got a really simple script, like this:

module.exports = function(robot) {
  robot.hear(/Computer!/, function(msg) {
      msg.reply("Why hello there! (ticker tape, ticker tape)");
  });
};

You want to test this, of course. So create a Mocha test:

var expect = require("chai").expect;
var path   = require("path");
 
var Robot       = require("hubot/src/robot");
var TextMessage = require("hubot/src/message").TextMessage;
 
describe("Eddie the shipboard computer", function() {
    var robot;
    var user;
    var adapter;
 
    beforeEach(function(done) {
        // create new robot, without http, using the mock adapter
        robot = new Robot(null, "mockadapter", false, "Eddie");
 
        robot.adapter.on("connected", function() {
            // only load scripts we absolutely need, like auth.coffee
            process.env.HUBOT_AUTH_ADMIN = "1";
            robot.loadFile(
                path.resolve(
                    path.join("node_modules/hubot/src/scripts")
                ),
                "auth.coffee"
            );
 
            // load the module under test and configure it for the
            // robot.  This is in place of external-scripts
            require("../index")(robot);
 
            // create a user
            user = robot.brain.userForId("1", {
                name: "mocha",
                room: "#mocha"
            });
 
            adapter = robot.adapter;
 
            done();
        });
 
        robot.run();
    });
 
    afterEach(function() {
        robot.shutdown();
    });
 
    it("responds when greeted", function(done) {
        // here's where the magic happens!
        adapter.on("reply", function(envelope, strings) {
            expect(strings[0]).match(/Why hello there/);
 
            done();
        });
 
        adapter.receive(new TextMessage(user, "Computer!"));
    });
});

You'll need devDependencies something like this in your package.json:

"devDependencies": {
  "chai": "~1.9.0",
  "hubot-mockadapter": "~1.0.0",
  "mocha": "~1.17.1",
  "webbybot": "^0.2.1",
  "sinon": "~1.9.0"
}

That's (almost) all there is to it!

firing up Mocha

Assuming you're using mocha to run your tests, and your tests are in test/. add a test script in your package.json:

"scripts": {
  "test": "mocha --compilers js:babel-register"
}

Then you can use npm test to run your tests!

Readme

Keywords

Package Sidebar

Install

npm i hubot-mockadapter

Weekly Downloads

5

Version

2.0.2

License

MIT

Last publish

Collaborators

  • gasolin