모카와 좀비를 사용하여 Node.js/Express.js 애플리케이션을 테스트하려고합니다. 간단한 테스트를 통과 할 수 있지만 Twitter 부트 스트랩의 스크립트 태그를 내보기에 추가하자마자 브라우저 객체가 빈 HTML을 반환합니다.부트 스트랩을 사용할 때 zombie.js 브라우저가 빈 HTML을 반환하는 이유는 무엇입니까?
process.env.NODE_ENV = 'test';
var app = require('../app');
var assert = require('assert');
var Browser = require('zombie');
describe('home page', function() {
before(function() {
this.server = app.listen(3000);
this.browser = new Browser({site: 'http://localhost:3000', debug : true});
});
it('should show welcome', function(done) {
var browser = this.browser;
browser
.visit("/")
.then(function() {
console.log(browser.html());
})
.fail(function(error) {
console.log("Error: ", error);
})
.then(done);
});
after(function(done) {
this.server.close(done);
});
});
뷰 코드 (내 layout.jade 파일) : 나는 스크립트 태그를 제거하면
doctype 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
script(src='/javascripts/jquery-2.0.3.min.js')
script(src='/javascripts/bootstrap.min.js')
body
.navbar.navbar-inverse.navbar-fixed-top
.container
.navbar-header
button.navbar-toggle(type='button', data-toggle='collapse', data-target='.navbar-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.navbar-brand(href='/') Contact Database
.collapse.navbar-collapse
ul.nav.navbar-nav
li.active
a(href='/') Home
li.active
a(href='/contacts') Contacts
block content
의 HTML이 콘솔로 기록됩니다 여기
내 테스트 코드입니다 예상했다. 그렇지 않으면 빈 HTML이 반환됩니다.디버그 출력 :
home page
◦ should show welcome: Zombie: Opened window http://localhost:3000/
GET/200 283ms - 1018b
Zombie: GET http://localhost:3000/ => 200
Zombie: Loaded document http://localhost:3000/
GET /javascripts/bootstrap.min.js 200 4ms - 27.08kb
Zombie: GET http://localhost:3000/javascripts/jquery-2.0.3.min.js => 200
Zombie: GET http://localhost:3000/javascripts/bootstrap.min.js => 200
GET /javascripts/jquery-2.0.3.min.js 200 41ms - 81.65kb
<html></html>
Zombie: Event loop is empty
✓ should show welcome (414ms)
이 문제가 타이밍해야 할 수도 나타납니다. 문서가로드 된 후 Javascript 파일이로드됩니다. 자바가로드되기 전에 좀비가 콜백 함수를 실행하고 있는지 궁금합니다. 따라서 DOM은 그 시점에서 비어 있습니다. 어떤 아이디어?
업데이트 :이 아래 wprl의 제안에 의해 해결되었다
. 나는 조금 지금 내 테스트 로직을 다시 작성해야합니다
it('should show welcome', function(done) {
// Wait until page is loaded
function pageLoaded(window) {
return window.document.querySelector(".container");
}
var browser = this.browser;
browser.visit("/");
browser.wait(pageLoaded, function() {
console.log(browser.html());
});
done();
});
하지만 작업에 대기 기능을했다 얻는 데 키 : 여기
는 대기 기능을 추가 한 후, 작동 테스트입니다.
정말 잘됐다! 내 게시물을 수정하여 업데이트 된 테스트 코드를 표시합니다. 감사! –