Zombie/Mocha browser.wait(…)方法没有执行

Zombie/Mocha browser.wait(...) method doesn't execute.

本文关键字:方法 执行 Mocha browser wait Zombie      更新时间:2023-09-26

我们开门见山吧。

这是我使用的一段代码,应该测试web应用程序(目前只显示<p>Welcome!</p>)

var app = require('../app');
var assert = require('assert');
var Browser = require('zombie');
describe('home page', function() {
    var browser, server;
    before(function() {
        server = app.listen(3000);
        browser = new Browser({site: 'http://localhost:3000', debug: true});
    });
    it('should show welcome', function(done) {
    // Wait until page is loaded
        function pageLoaded(window) {
            console.log('4');
            return window.document.querySelector(".container");
        }
        console.log('1');
        browser.visit("/");
        console.log('2');
        browser.wait(pageLoaded, function() {
            console.log('3');
            assert.ok(browser.success);
            assert.equal(browser.text('p'), 'Welcomexxx!');
            console.log(browser.html());
        });
        done();
    });
    after(function(done) {
        server.close(done);
    }); 
});

这个测试不应该通过,因为我正在检查Welcomexxx!不受欢迎的!然而,无论我测试什么,它总是通过。正如您所看到的,我在代码中添加了一些控制台输出,以查看发生了什么。令我惊讶的是,3和4都没有显示在控制台上。这基本上意味着等待函数不执行。

以下是未失败测试的预期输出:

home page
✓ should show welcome
GET / 200 5ms - 15b
1 passing (63ms)

下面是上面测试的输出:

home page
1
Zombie: Opened window http://localhost:3000/  //zombie debug line
2
✓ should show welcome 
1 passing (22ms)

如您所见,在输出中也没有"get"语句。此外,僵尸似乎在一般工作,作为浏览器。Visit显示控制台输出,指示发生了某些事情。

有人能解释一下为什么会这样吗?我有能力运行的应用程序与foreman启动或节点应用程序,我可以在我的浏览器中看到,一切都很好(理论上)。

在我看来,对done()的调用应该在browser.wait()的回调处理程序中

it('should show welcome', function(done){
  ....
  browser.wait(pageLoaded, function(){
     ...
     assert( ... );
     done();
  });
});

你必须处理僵尸回调函数或在承诺像下面的例子:

browser.visit("/").then(function(){
    assert.ok(browser.success);
    assert.equal(browser.text('p'), 'Welcomexxx!');
    console.log(browser.html());
}).then(done, done);