Garrick Cheung
twitter: @garrickcheung
Senior frontend dev @
Slides heavily inspired by Tiago Rodrigues (@trodrigues)
It's like Mocha, Jasmine and JSTestDriver had a genetically engineered baby
Mostly all the features of all of those frameworks, but well put together
And it has a test runner!
$ npm install buster-amd
var config = module.exports;
config["web-module"] = { environment: "browser", rootPath: "js", sources: ["someModule.js"], tests: ["test/*-test.js"], libs: ["require.js"], extensions: [require("buster-amd")] };
// someModule.js
define([], function() {
return { name: "module" };
});
// someModule-test.js
define(["someModule"], function(mod) {
buster.testCase("some test", {
"test that fails" : function() {
assert.match(mod, {name: "wrong name"});
},
"test that succeeds" : function() {
assert.match(mod, {name: "module"});
}
});
});
$ npm install buster phantomjs
# Run buster-server to capture phantomjs in a separate process
$ ./node_modules/.bin/buster-server --capture-headless
# Run tests
$ ./node_modules/.bin/buster-test --browser
$ ./node_modules/buster/bin/buster-test --reporter xml > test/test-report.xml
$ npm install buster-selenium
var config = module.exports;
config["Selenium Tests"] = {
rootPath: "js",
environment: "node",
extensions: [require("buster-selenium")],
tests: ["test/wd-test.js"],
"buster-selenium": {
driver: 'wd',
config: {
server: {},
desiredCapabilities: {
browserName: 'phantomjs'
}
}
}
};
var buster = require('buster');
var assert = buster.assert;
// globalize describe/before/after/it functions
buster.spec.expose();
describe('WD', function() {
before(function() {
// New browser instance with WD's promise API
var browser = this.browser = this.webdriver.browser('promise');
return browser.init();
});
after(function() {
// Returned promise will wait for the browser
// to close before completing this test
return this.browser.quit();
});
it('goes to Google', function() {
var driver = this.webdriver.driver;
var browser = this.browser;
return browser.get('http://www.google.com').then(function() {
return browser.title();
}).then(function(title) {
assert.equals(title, 'Google');
return browser.elementByName('q');
}).then(function(input) {
return input.type('webdriver');
}).then(function() {
return browser.elementByName('btnG');
}).then(function(button) {
return button.click();
}).then(function() {
var defer = (driver.Q || browser.Q).defer();
browser.waitForCondition('document.title === "webdriver - Google Search"', 5000, defer.resolve);
return defer.promise;
}).then(function() {
return browser.title();
}).then(function(title) {
assert.equals(title, 'webdriver - Google Search');
});
})
});
# Run the tests
$ ./node_modules/.bin/buster-test --node