2015-04-25 4 views
2

Я использую 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' установить глобальная продолжительность ожидания, чтобы пройти тест, но я не уверен, что это лучший способ.

ответ

1

Мы можем назвать browser.pressButton без прохождения обратного вызова, а затем проверить их в browser.wait:

it('should find "Delayed Hello World!" in page after a while', function(done) { 
    browser.pressButton('#mybutton'); 
    browser.wait(10000).then(function() { 
     browser.assert.status(200); 
     browser.assert.text('#response', "Delayed Hello World in 8s!"); 
    }).then(done, done) 
}); 

https://github.com/freewind/zombiejs-test/blob/master/test/wait-spec.js#L28