node-phantom-simple
Version:
Simple and reliable bridge between Node.js and PhantomJS / SlimerJS
200 lines (160 loc) • 4.98 kB
JavaScript
;
var http = require('http');
var assert = require('assert');
var driver = require('../');
describe('page.evaluate()', function () {
var server;
before(function (done) {
server = http.createServer(function (request, response) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end('<html><head></head><body><h1>Hello World</h1></body></html>');
}).listen(done);
});
it('should return false as boolean (#43)', function (done) {
driver.create({ path: require(process.env.ENGINE || 'phantomjs').path }, function (err, browser) {
if (err) {
done(err);
return;
}
browser.createPage(function (err, page) {
if (err) {
done(err);
return;
}
page.open('http://localhost:' + server.address().port, function (err, status) {
if (err) {
done(err);
return;
}
assert.equal(status, 'success');
// Engines are buggy and can corrupt result values:
//
// - SlimerJS
// - undefined -> null
// - PhantomJS
// - undefined -> null
// - null -> empty string
// - [ 1, undefined, 2 ] -> null
//
page.evaluate(function () {
return false;
}, function (err, result) {
if (err) {
done(err);
return;
}
assert.strictEqual(result, false);
browser.exit(done);
});
});
});
});
});
it('without extra args', function (done) {
driver.create(
{ path: require(process.env.ENGINE || 'phantomjs').path, ignoreErrorPattern: /CoreText performance note/ },
function (err, browser) {
if (err) {
done(err);
return;
}
browser.createPage(function (err, page) {
if (err) {
done(err);
return;
}
page.open('http://localhost:' + server.address().port, function (err, status) {
if (err) {
done(err);
return;
}
assert.equal(status, 'success');
page.evaluate(function () {
return { h1text: document.getElementsByTagName('h1')[0].innerHTML };
}, function (err, result) {
if (err) {
done(err);
return;
}
assert.equal(result.h1text, 'Hello World');
browser.exit(done);
});
});
});
}
);
});
it('with extra args, callback is last', function (done) {
driver.create(
{ path: require(process.env.ENGINE || 'phantomjs').path, ignoreErrorPattern: /CoreText performance note/ },
function (err, browser) {
if (err) {
done(err);
return;
}
browser.createPage(function (err, page) {
if (err) {
done(err);
return;
}
page.open('http://localhost:' + server.address().port, function (err, status) {
if (err) {
done(err);
return;
}
assert.equal(status, 'success');
page.evaluate(function (a, b, c) {
return { h1text: document.getElementsByTagName('h1')[0].innerHTML, abc: a + b + c };
}, 'a', 'b', 'c', function (err, result) {
if (err) {
done(err);
return;
}
assert.equal(result.h1text, 'Hello World');
assert.equal(result.abc, 'abc');
browser.exit(done);
});
});
});
}
);
});
it('with extra args (legacy style)', function (done) {
driver.create(
{ path: require(process.env.ENGINE || 'phantomjs').path, ignoreErrorPattern: /CoreText performance note/ },
function (err, browser) {
if (err) {
done(err);
return;
}
browser.createPage(function (err, page) {
if (err) {
done(err);
return;
}
page.open('http://localhost:' + server.address().port, function (err, status) {
if (err) {
done(err);
return;
}
assert.equal(status, 'success');
page.evaluate(function (a, b, c) {
return { h1text: document.getElementsByTagName('h1')[0].innerHTML, abc: a + b + c };
}, function (err, result) {
if (err) {
done(err);
return;
}
assert.equal(result.h1text, 'Hello World');
assert.equal(result.abc, 'abc');
browser.exit(done);
}, 'a', 'b', 'c');
});
});
}
);
});
after(function (done) {
server.close(done);
});
});