Javascript 对同一幻影实例使用createPage()两次
我试图用PhantomJS设置mocha测试,但遇到了一个问题,无法使用同一个PhantomJS实例创建多个页面。第一个测试用例运行正常,但第二个测试用例超时。我只想使用一个实例,因为它应该更快Javascript 对同一幻影实例使用createPage()两次,javascript,node.js,phantomjs,mocha.js,Javascript,Node.js,Phantomjs,Mocha.js,我试图用PhantomJS设置mocha测试,但遇到了一个问题,无法使用同一个PhantomJS实例创建多个页面。第一个测试用例运行正常,但第二个测试用例超时。我只想使用一个实例,因为它应该更快 var assert = require('assert'); var phantom = require('phantom'); var path = require('path'); var ph; describe('document', function() { before(fun
var assert = require('assert');
var phantom = require('phantom');
var path = require('path');
var ph;
describe('document', function() {
before(function(done) { // Create only one phantom instance for the whole suite
this.timeout(10000); // Prevent test case from aborting while phantom loads
phantom.create(function(p) {
ph = p;
done();
}, {
dnodeOpts: {weak: false}
});
});
it('should have a title', function(done) {
ph.createPage(function(page) {
var url = 'file:///' + path.resolve(__dirname + '/index.html');
page.open(url, function(status) {
page.evaluate(function() {
return document.title;
}, function(title) {
assert.equal('This is a title', title);
ph.exit();
done();
});
});
});
});
it('should have the same title', function(done) {
ph.createPage(function(page) {
var url = 'file:///' + path.resolve(__dirname + '/index.html');
page.open(url, function(status) {
page.evaluate(function() {
return document.title;
}, function(title) {
assert.equal('This is a title', title);
ph.exit();
done();
});
});
});
});
});
为什么它不会第二次打开页面?第一次测试后,您将退出PhantomJS,因此第二次测试失败。您需要运行
ph.exit()代码>仅在所有测试后执行一次。我怀疑这可以通过以下方式实现:
describe('document', function() {
before(...);
after(function(done) {
ph.exit();
done();
});
it(...);
it(...);
});
您甚至可以在之前的期间创建页面
,并在测试中使用页面
实例。每个测试用例仍然应该打开一个新的URL,以便呈现一个新的DOM。对于内存泄漏,这可能会更快、更具弹性
顺便说一下,PhantomJS的localStorage
永远不会被清除(因为它存储在磁盘上),所以您必须在每个测试用例之后或在执行结束时自己清除它。
PhantomJS每个进程也只有一个CookieJar(仅在内存中),因此如果您测试登录或类似的内容,您必须删除Cookie。测试用例将修改DOM,因此我应该使这些用例独立于执行顺序,并每次重新加载页面。否,您只需全局管理页面
实例。每个it
都必须重新打开url。顺便说一句,PhantomJS的本地存储永远不会被清除,因此您必须在每个测试用例之后或在执行结束时自己清除它。PhantomJS每个进程也只有一个CookieJar,所以如果您测试登录或类似的东西,就必须删除Cookie。哦,我明白了,我错过了。