Я использую zombiejs для проверки html-страницы, на которой есть кнопка, при нажатии на нее она выдает вызов ajax и обновляет страницу через несколько секунд.Как утверждать страницу после нажатия кнопки, которая выполняет медленный вызов ajax с помощью zombiejs?
/static/ajax-button.html
<html>
<head>
<script src="./js/jquery-1.11.2.js"></script>
<script>
function fetchResponse() {
$.get('/delay/8', function(data) {
$('#response').text(data);
});
}
</script>
</head>
<body>
<button id="mybutton" onclick="fetchResponse()">Click me to fetch response</button>
<div id="response">please wait for a while ...</div>
</body>
</html>
приложение/app.js
с использованием expressjs:
app.get('/delay/:seconds', function(req, res) {
const seconds = req.param("seconds") || 1;
setTimeout(function() {
res.send('Delayed Hello World in ' + seconds + 's!')
}, seconds * 1000);
});
тест/кнопочного-Spec .js
const Browser = require('zombie');
const moment = require('moment');
const expect = require('expectations');
// We're going to make requests to http://example.com/???
// Which will be routed to our test server localhost:3000
Browser.localhost('example.com', 3000);
describe('browser.pressButton', function() {
const browser = new Browser();
this.timeout(10000);
before(function(done) {
console.log("######## browser.visit");
browser.visit('/static/ajax-button.html', done);
});
before(function(done) {
console.log("######## browser.pressButton");
browser.pressButton('#mybutton', done);
});
it('should find "Delayed Hello World!" in page after a while', function(done) {
console.log("######## testing");
console.log(browser.html());
browser.assert.status(200);
browser.assert.text('#response', "Delayed Hello World in 8s!");
});
});
Но когда я использую мокко, чтобы запустить его как:
mocha test/press-button-spec.js
Он сообщает:
➜ zombiejs-test git:(master) ✗ mocha test/press-button-spec.js
browser.pressButton
######## browser.visit
######## browser.pressButton
1) "before all" hook
0 passing (5s)
1 failing
1) browser.pressButton "before all" hook:
Timeout: did not get to load all resources on this page
Кажется browser.pressButton('#mybutton', done);
это тайм-аут, потому что время ожидания по умолчанию для zombiejs является 5000ms
, но Аякса необходимо позвонить 8s
.
Как это исправить?
Вы также можете найти код из этого https://github.com/freewind/zombiejs-test
После клонирован, запустите:
node app/app.js
mocha test/press-button-spec.js
UPDATE:
Я могу добавить browser.waitDuration = '10s'
установить глобальная продолжительность ожидания, чтобы пройти тест, но я не уверен, что это лучший способ.