使用Zombie.js查询Backbone.js应用程序的DOM

只是今天第一次尝试了Zombie.js ,而且我无法访问通过javascript(特别是Backbone.js应用程序)填充DOM元素的页面。 作为一个简单的例子,我访问了Backbone.js Todo应用程序并手动添加了一些项目。 然后,我试着用僵尸来抓取#todo-list元素中的html,然后空着。 我已经设置browser.runScripts = true ,所以不应该一切准备僵尸查询?

查看源代码,内部HTML确实是空的。 这甚至有可能与Zombie.js? 还是我需要使用像茉莉花这样的东西呢?

我已经包括下面的示例代码,以及我得到的回应。

 var zombie = require('zombie'), vows = require('vows'), assert = require('assert'); var baseUrl = 'http://documentcloud.github.com/backbone/examples/todos/index.html'; vows.describe('Zombie Tests on a Backbone App').addBatch({ 'Navigate to Todo List' : { topic: function () { browser = new zombie.Browser({ debug: true }); browser.runScripts = true; browser.on('error',function (err){console.log(err.stack)}); browser.visit(baseUrl, this.callback); }, 'Can see todo list' : function (err,browser,status) { console.log('todo-list inner:' + browser.querySelector("#todo-list").innerHTML); // actual tests would go here } }, }).export(module); 

而来自vows的输出:

 > vows test/todo-test.js --spec ♢ Zombie Tests on a Backbone App Zombie: GET http://documentcloud.github.com/backbone/examples/todos/index.html Zombie: GET http://documentcloud.github.com/backbone/examples/todos/index.html => 200 Zombie: GET http://documentcloud.github.com/backbone/test/vendor/json2.js Zombie: GET http://documentcloud.github.com/backbone/test/vendor/jquery-1.5.js Zombie: GET http://documentcloud.github.com/backbone/test/vendor/underscore-1.1.6.js Zombie: GET http://documentcloud.github.com/backbone/backbone.js Zombie: GET http://documentcloud.github.com/backbone/examples/backbone-localstorage.js Zombie: GET http://documentcloud.github.com/backbone/examples/todos/todos.js Zombie: GET http://documentcloud.github.com/backbone/examples/backbone-localstorage.js => 200 Zombie: GET http://documentcloud.github.com/backbone/test/vendor/json2.js => 200 Zombie: GET http://documentcloud.github.com/backbone/test/vendor/underscore-1.1.6.js => 200 Zombie: GET http://documentcloud.github.com/backbone/backbone.js => 200 Zombie: GET http://documentcloud.github.com/backbone/examples/todos/todos.js => 200 Zombie: GET http://documentcloud.github.com/backbone/test/vendor/jquery-1.5.js => 200 Zombie: Firing timeout 1, delay: 1 todolist inner: Navigate to Todo List ✓ Can see todo list ✓ OK » 1 honored (3.824s) 

如果您使用browser.html方法,那么您的示例工作 – 我认为问题来自没有querySelector方法的browser对象(虽然它有一个queryqueryAll方法 ,虽然)。

以下是修改后的工作片段:

 'Can see todo list' : function (err, browser, status) { var list = browser.html('#todo-list'); console.log('todo-list inner: ' + list); // actual tests would go here } 

我认为这种访问方式太早了。 尝试等待“完成”事件,例如browser.on('done', this.callback)