Zombie/Mocha browser.wait(…)方法没有执行
Zombie/Mocha browser.wait(...) method doesn't execute.
我们开门见山吧。
这是我使用的一段代码,应该测试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);
相关文章:
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- 通过ajax从客户端调用C#方法来执行C#方法
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 如何使用get或post方法连接和执行ajax
- 从 ajax .post 方法执行 PHP 页面后显示它
- Javascript 方法执行顺序
- 同步 jquery 调用 - 如何等到 jquery 方法执行竞争
- 在javascript中,循环是在get方法执行之前执行的
- 当用户试图删除indexedDB数据库时,是否有方法执行函数
- 如何停止for循环执行,直到for循环内部的DWR方法执行完成
- setTimeout方法执行一次
- 在方法执行之间等待一段时间
- 当按ok在对话框服务器方法执行,如果按取消留在我的页面上.如何去做
- 如何停止setTimeout中定义的方法执行
- 是否有可能使用任何方法执行javascript代码
- 在jQuery中添加属性时,使用attr()方法,将属性作为键值对象传递,还是直接传递,哪种方法执行速度最快?
- Javascript方法执行和触发事件