4

今日初めてZombie.jsを試してみましたが、javascript を介して DOM 要素を設定するページ (具体的には Backbone.js アプリ) にアクセスするのに問題があります。簡単な例として、Backbone.js の Todo アプリにアクセスし、いくつかの項目を手動で追加しました。次に、Zombie を使用して要素内の html を取得しようとしました#todo-listが、空に戻りました。を設定browser.runScripts = trueしたので、Zombie が照会できるようにすべての準備ができているはずではありませんか?

ソースを見ると、内部の 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)
4

2 に答える 2

1

メソッドを使用すると、例が機能します — 問題は、メソッドを持たないオブジェクトbrowser.htmlにあると思います(ただし、 andメソッドはあります)。browserquerySelectorqueryqueryAll

改訂された作業スニペットは次のとおりです。

'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
}
于 2012-01-03T22:15:11.270 に答える
0

visit メソッドのコールバックが早すぎると思います。「完了」イベントを待ってみてくださいbrowser.on('done', this.callback)

于 2011-09-27T11:11:57.960 に答える