我尝试使用PhantomJS设置mocha测试,但我遇到了一个问题,我无法使用相同的幻像实例来创建多个页面。第一个测试用例运行得很好,但第二个测试用例超时。我只想使用一个实例,因为它应该更快。
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();
});
});
});
});
});
为什么第二次不打开页面?
答案 0 :(得分:1)
您在第一次测试后退出PhantomJS,因此第二次测试失败。所有测试后,您只需运行一次ph.exit();
。我怀疑这可以通过以下方式完成:
describe('document', function() {
before(...);
after(function(done) {
ph.exit();
done();
});
it(...);
it(...);
});
在createPage
期间你可能会before
,并且在测试中使用page
实例。每个测试用例仍然应该打开一个新的URL,以便呈现一个新的DOM。这可能会更快,更有弹性抵御内存泄漏。
localStorage
(因为它存储在磁盘上),因此您必须在每个测试用例之后或执行结束时自行清除它。