gpt4 book ai didi

node.js - 为什么zombie.js浏览器在使用Bootstrap时返回空HTML?

转载 作者:IT老高 更新时间:2023-10-28 23:16:41 25 4
gpt4 key购买 nike

我正在尝试使用 Mocha 和 Zombie 测试我的 Node.js/Express.js 应用程序。我可以通过简单的测试,但只要将 Twitter Bootstrap 的脚本标签添加到我的 View 中,浏览器对象就会返回空 HTML。

这是我的测试代码:

process.env.NODE_ENV = 'test';

var app = require('../app');
var assert = require('assert');
var Browser = require('zombie');

describe('home page', function() {
before(function() {
this.server = app.listen(3000);
this.browser = new Browser({site: 'http://localhost:3000', debug : true});
});

it('should show welcome', function(done) {
var browser = this.browser;
browser
.visit("/")
.then(function() {
console.log(browser.html());
})
.fail(function(error) {
console.log("Error: ", error);
})
.then(done);
});

after(function(done) {
this.server.close(done);
});
});

查看代码(我的layout.jade文件):

doctype 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
script(src='/javascripts/jquery-2.0.3.min.js')
script(src='/javascripts/bootstrap.min.js')
body
.navbar.navbar-inverse.navbar-fixed-top
.container
.navbar-header
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.navbar-brand(href='/') Contact Database
.collapse.navbar-collapse
ul.nav.navbar-nav
li.active
a(href='/') Home
li.active
a(href='/contacts') Contacts
block content

如果我删除脚本标签,HTML 会按预期记录到控制台。否则,我会返回空 HTML。

调试输出:

home page
◦ should show welcome: Zombie: Opened window http://localhost:3000/
GET / 200 283ms - 1018b
Zombie: GET http://localhost:3000/ => 200
Zombie: Loaded document http://localhost:3000/
GET /javascripts/bootstrap.min.js 200 4ms - 27.08kb
Zombie: GET http://localhost:3000/javascripts/jquery-2.0.3.min.js => 200
Zombie: GET http://localhost:3000/javascripts/bootstrap.min.js => 200
GET /javascripts/jquery-2.0.3.min.js 200 41ms - 81.65kb
<html></html>
Zombie: Event loop is empty
✓ should show welcome (414ms)

看来问题可能与时间有关。加载文档,然后加载 Javascript 文件。我想知道 zombie 在加载 Javascript 之前是否正在执行我的回调函数,因此此时 DOM 是空的。有什么想法吗?

更新:

wprl 在下面的建议解决了这个问题。

这是添加等待功能后有效的测试:

it('should show welcome', function(done) {

// Wait until page is loaded
function pageLoaded(window) {
return window.document.querySelector(".container");
}

var browser = this.browser;
browser.visit("/");
browser.wait(pageLoaded, function() {
console.log(browser.html());
});
done();
});

我现在必须稍微重写一下我的测试逻辑,但让它工作的关键是等待函数。

最佳答案

听起来时间可能是个问题。另一方面,Zombie 擅长仅在使用访问时停止 JavaScript 事件后才为您提供控制。

一个好的策略是browser.wait 让某个DOM 元素出现,然后再继续进行测试。这样你就知道了,例如Bootstrap 已加载并显示元素 #widget-view

可能也想调整 maxWait/waitFor

至少你可以排除时间问题。

关于node.js - 为什么zombie.js浏览器在使用Bootstrap时返回空HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com