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

安德鲁·布兰德(Andrew Blunder)

我正在尝试使用Mocha和Zombie测试我的Node.js / Express.js应用程序。我可以通过简单的测试,但是一旦将Twitter Bootstrap的脚本标签添加到视图中,浏览器对象就会返回空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文件。我想知道僵尸是否在加载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();
});

我现在必须重新编写测试逻辑,但是使其生效的关键是等待功能。

wprl

听起来确实像计时可能是个问题。另一方面,Zombie擅长让您仅在使用visit时JavaScript事件停止后才进行控制。

一个好的策略是browser.wait在进行测试之前让某个DOM元素出现。这样,您便知道Bootstrap已加载并显示了element #widget-view

可能要调整maxWait/ waitFor

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Chrome浏览器中的speechSynthesis.getVoices()返回空列表?

来自分类Dev

为什么当我使用函数返回值并崩溃浏览器时 *ngFor 会无限循环?

来自分类Dev

直接从浏览器地址栏访问时,反应返回空白页

来自分类Dev

为什么在浏览器中使用 directX 视频时 mstsc 会崩溃:TOR、Chrome 等

来自分类Dev

当我从浏览器修改html / js时,为什么多次发送ajax请求

来自分类Dev

为什么使用 Jsoup 解析站点时 HTML 代码与使用浏览器不同

来自分类Dev

有了Promise,为什么浏览器会两次返回拒绝,但不会两次返回解决?

来自分类Dev

MVC3。当返回500状态代码时,浏览器会自行发出警报

来自分类Dev

为什么在使用网络共享时特定网站会强制在桌面浏览器上使用移动界面?

来自分类Dev

使用图表js时,代替日期的空值会导致浏览器崩溃

来自分类Dev

连接到服务器时,浏览器是否会自动请求index.html?

来自分类Dev

连接到服务器时,浏览器是否会自动请求index.html?

来自分类Dev

当我引入CSS变量时,为什么浏览器会尝试使用其他无效的属性声明?

来自分类Dev

为什么更新进度条时浏览器会挂起?

来自分类Dev

当jquery加载大量数据时,为什么浏览器会阻塞?

来自分类Dev

从浏览器返回时应用崩溃

来自分类Dev

React.js:为什么我在浏览器上看不到 HTML 内容?

来自分类Dev

为什么浏览器返回未定义?

来自分类Dev

为什么 InputStreamReader 返回的内容与浏览器不同?

来自分类Dev

为什么Bootstrap Glyphicons仅在Google Chrome浏览器中调试时出现?

来自分类Dev

为什么Bootstrap Glyphicons仅在Google Chrome浏览器中调试时出现?

来自分类Dev

当解析的URL在浏览器中工作正常时,为什么OpenURI返回404?

来自分类Dev

我在使用Node JS在浏览器中显示HTML响应数据时遇到问题

来自分类Dev

当您使用浏览器返回时会发生什么?

来自分类Dev

为什么现代的浏览器JS引擎是多线程的?

来自分类Dev

使用React Router刷新浏览器历史记录会返回来自我的API的调用

来自分类Dev

当浏览器关闭时,PHP会话Cookie会过期

来自分类Dev

使用JS刷新浏览器窗口

来自分类Dev

使用JS刷新浏览器窗口

Related 相关文章

  1. 1

    为什么Chrome浏览器中的speechSynthesis.getVoices()返回空列表?

  2. 2

    为什么当我使用函数返回值并崩溃浏览器时 *ngFor 会无限循环?

  3. 3

    直接从浏览器地址栏访问时,反应返回空白页

  4. 4

    为什么在浏览器中使用 directX 视频时 mstsc 会崩溃:TOR、Chrome 等

  5. 5

    当我从浏览器修改html / js时,为什么多次发送ajax请求

  6. 6

    为什么使用 Jsoup 解析站点时 HTML 代码与使用浏览器不同

  7. 7

    有了Promise,为什么浏览器会两次返回拒绝,但不会两次返回解决?

  8. 8

    MVC3。当返回500状态代码时,浏览器会自行发出警报

  9. 9

    为什么在使用网络共享时特定网站会强制在桌面浏览器上使用移动界面?

  10. 10

    使用图表js时,代替日期的空值会导致浏览器崩溃

  11. 11

    连接到服务器时,浏览器是否会自动请求index.html?

  12. 12

    连接到服务器时,浏览器是否会自动请求index.html?

  13. 13

    当我引入CSS变量时,为什么浏览器会尝试使用其他无效的属性声明?

  14. 14

    为什么更新进度条时浏览器会挂起?

  15. 15

    当jquery加载大量数据时,为什么浏览器会阻塞?

  16. 16

    从浏览器返回时应用崩溃

  17. 17

    React.js:为什么我在浏览器上看不到 HTML 内容?

  18. 18

    为什么浏览器返回未定义?

  19. 19

    为什么 InputStreamReader 返回的内容与浏览器不同?

  20. 20

    为什么Bootstrap Glyphicons仅在Google Chrome浏览器中调试时出现?

  21. 21

    为什么Bootstrap Glyphicons仅在Google Chrome浏览器中调试时出现?

  22. 22

    当解析的URL在浏览器中工作正常时,为什么OpenURI返回404?

  23. 23

    我在使用Node JS在浏览器中显示HTML响应数据时遇到问题

  24. 24

    当您使用浏览器返回时会发生什么?

  25. 25

    为什么现代的浏览器JS引擎是多线程的?

  26. 26

    使用React Router刷新浏览器历史记录会返回来自我的API的调用

  27. 27

    当浏览器关闭时,PHP会话Cookie会过期

  28. 28

    使用JS刷新浏览器窗口

  29. 29

    使用JS刷新浏览器窗口

热门标签

归档