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 секунд или около того.

0 ответов

Другие вопросы по тегам