page-chauffeur
Version:
A cross browser library for writing functional tests using webdriver
200 lines (182 loc) • 5.4 kB
JavaScript
var sinonChai = require('sinon-chai'),
sinon = require('sinon'),
chai = require('chai'),
expect = chai.expect,
unroll = require('unroll'),
Browser = require('../../lib/browser.js'),
Driver = require('../../lib/driver.js'),
Module = require('../../lib/module.js');
chai.use(sinonChai);
describe('Driver()', function() {
var config = {
webDriverClass: 'webdriverio',
webDriverConfig: {
'foo': 'blah'
}
};
describe('constructor', function () {
it('should instantiate correctly and return an object instance', function() {
var driver = new Driver(config);
expect(driver).to.be.an('object');
});
});
describe('unimplemented methods', function () {
//dynamically determine methods to test
var driverPrototypeMethods = function getDriverPrototypeMethods() {
var unrollValues = [['method']];
Object.keys(Driver.prototype).forEach(function(item) {
unrollValues.push([item]);
}
);
return unrollValues;
}();
unroll('#method should throw a NOT_IMPLEMENTED_EXCEPTION',
function(done, testArgs) {
var driver = new Driver();
expect(function() {
driver[testArgs.method]();
}).to.throw('NOT_IMPLEMENTED_EXCEPTION');
done();
},
driverPrototypeMethods
);
});
describe('_getExpectationCallback()', function() {
unroll('should not errback when result #result matches expectation #expectation',
function(done, testArgs) {
var result,
expectationCallback = Driver._getExpectationCallback(
testArgs.expectation,
testArgs.msg,
testArgs.keys
);
expect(expectationCallback).to.be.a('function');
result = expectationCallback(null, testArgs.result);
expect(result).to.equal(testArgs.callbackResult);
done();
},
[
[
'result',
'callbackResult',
'expectation',
'msg',
'keys'
],
[
'foo',
true,
function(err, result) {
return result === 'foo';
} ,
'',
''
],
[
'foo',
true,
'foo',
'',
''
],
[
{
width: 100,
height: 50
},
true,
{ width: 100,
height: 50
},
'""',
['width','height']]
]
);
unroll('should errback when result does not match expectation',
function(done, testArgs) {
var expectationCallback = Driver._getExpectationCallback(
testArgs.expectation, testArgs.msg, testArgs.keys
);
Driver.resolveWith(function(err) {
expect(err.message).to.equal(testArgs.errorMessage);
expect(err.actual).to.eql(testArgs.result);
expect(err.expected).to.eql(testArgs.expectation);
done();
});
expectationCallback(null, testArgs.result);
},
[
[
'result',
'errorMessage',
'expectation',
'msg',
'keys'
],
[
'foo',
'Value does not match.',
'bar',
'Value does not match.',
null
],
[
{
width: 90,
height: 50
},
'Value does not match.',
{ width: 100,
height: 50
},
'Value does not match.',
['width','height']]
]
);
unroll('should errback if there was an error retrieving value',
function(done,testArgs) {
var expectationCallback = Driver._getExpectationCallback('foo');
Driver.resolveWith(function(err) {
expect(err.message).to.equal(testArgs.expectation);
done();
});
expectationCallback(testArgs.err, null);
},
[
['err' , 'expectation' ],
['err' , 'err' ],
[
{
message: 'error from Message'
} , 'error from Message' ],
[
{
orgStatusMessage: 'error from orgStatusMessage'
} , 'error from orgStatusMessage']
]
);
});
describe('getWebDriver', function () {
unroll('should return correct webdriver object if #wdClass exists',
function(done, testArgs) {
var wd;
wd = Driver.getWebDriver(testArgs.wdClass);
expect(wd).to.be.an('function');
done();
},
[
['wdClass' ],
['webdriverio']
]
);
it('should errback exception when webdriver class does not exist',
function() {
try {
Driver.getWebDriver('unknown');
} catch(e) {
expect(e.code).to.equal("MODULE_NOT_FOUND");
}
}
);
});
});