2011-09-14 4 views
4

오늘 처음으로 Zombie.js을 시도해 보았습니다. javascript (특히 Backbone.js 앱)를 통해 DOM 요소를 채우는 페이지를 방문하는 데 문제가 있습니다. 빠른 예를 들어, Backbone.js Todo app을 방문하고 몇 가지 항목을 수동으로 추가했습니다. 그런 다음 좀비를 사용하여 #todo-list 엘리먼트 내의 html을 가져 오려고했습니다. 다시 비어있게되었습니다. browser.runScripts = true을 설정 했으므로 좀비가 쿼리 할 준비가되지 않아야합니까?Zombie.js로 Backbone.js 앱의 DOM 쿼리하기

소스를 보면 내부 HTML이 실제로 비어 있습니다. Zombie.js를 통해서도 가능합니까? 아니면 here처럼 재스민과 같은 것을 사용해야합니까?

나는 내가 얻은 응답과 함께 아래의 예제 코드를 포함시켰다.

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) 

답변

0

나는 방문 방법은 너무 일찍 다시 호출 생각합니다. '완료'이벤트를 기다려보십시오. browser.on('done', this.callback). 당신이 browser.html 방법을 사용하는 경우

1

가, 다음 예제는 작동합니다 - 나는 문제가 browser 객체가 querySelector 방법을 가지고 있지에서 오는 생각 (그것은 비록 query and queryAll method가 않습니다). 여기

개정, 일 조각입니다 :

'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 
}