FuncUnit не запускает тесты с PhantomJS
Я пытался создать серию функциональных модульных тестов для запуска на веб-сервере Node.js, используя PhantomJS в качестве браузера, тестируя функциональность на другом сайте. В прошлом я успешно использовал FuncUnit для запуска функциональных тестов с самого целевого сайта, но для тестирования масштаба я создал для этого проект Node, работающий на экземпляре Heroku.
Я использовал Bower для установки JQuery, Jasmine (я использую тестовый запуск) и FuncUnit. Мне сообщили, что FuncUnit не поддерживает самую последнюю версию Jasmine, поэтому она имеет версию 1.3.1 - все остальные пакеты имеют последнюю версию. Phantom был установлен вместе с NPM и открывает следующую страницу:
<html>
<head>
<title>Functional Testing</title>
<script type="text/javascript" src="bower_components/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="bower_components/syn/dist/syn.js"></script>
<script type="text/javascript" src="bower_components/jasmine-core/lib/jasmine-core/jasmine.js"></script>
<script type="text/javascript" src="bower_components/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
<script type="text/javascript" src="bower_components/jasmine-core/lib/jasmine-core/json2.js"></script>
<script type="text/javascript" src="bower_components/funcunit/dist/funcunit.js"></script>
<script type="text/javascript" src="testSpec.js"></script>
<script type="text/javascript">
// Standard Jasmine 1.3 boot script from examples
</script>
</head>
<body>
</body>
</html>
Я сталкиваюсь с ошибками почти сразу после запуска теста. Кажется, что приведенный ниже раздел вызывает сбои, хотя у меня возникли трудности с определением, какая именно линия в точности соответствует трассировке стека.
F.attach(jasmine);
F.speed = 100;
describe("Demo Script", function() {
"use strict";
it("should login to the website", function() {
F.open("http://example.site/login");
if (F('h2:contains("ALL PROJECTS")').size() === 0) {
// Not logged in
F('#Email').visible().type("a@b.com");
}
});
});
Это приводит к ошибке со следующим описанием:
TypeError: 'undefined' is not an object (evaluating 'off.left')
file:///app/bower_components/funcunit/dist/funcunit.js:290
file:///app/bower_components/funcunit/dist/funcunit.js:473
file:///app/bower_components/funcunit/dist/funcunit.js:120
file:///app/bower_components/funcunit/dist/funcunit.js:91
file:///app/bower_components/funcunit/dist/funcunit.js:2852
file:///app/bower_components/funcunit/dist/funcunit.js:3240
Верхняя строка этой трассировки стека указывает на следующую функцию:
//syn.helpers.addOffset
addOffset: function (options, el) {
var jq = syn.jquery(el), off;
if (typeof options === 'object' && options.clientX === undefined && options.clientY === undefined && options.pageX === undefined && options.pageY === undefined && jq) {
el = jq(el);
off = el.offset();
options.pageX = off.left + el.width() / 2;
options.pageY = off.top + el.height() / 2;
}
}
Кажется, что el
передается в эту функцию как undefined
, но попытка выяснить источник этого звонка оставила меня в тупике. Если кто-то увидит отсутствующие ссылки на скрипты или что-то не так с моей спецификацией теста, которая может вызвать это, это будет очень цениться. Спасибо!
редактировать
Я только что заметил, что если я оставлю его работающим, эта ошибка повторяется каждые 30 секунд или около того.