Глобальная функция в сиесте

Я только начал использовать Bryntum Siesta и ExtJs для автоматизированного тестирования. Моя первая, очень простая тестовая работа, как я и ожидал. Теперь я столкнулся с проблемой с DRY-Code.

Я пытаюсь написать СУХОЙ код для теста входа.

На самом деле здесь два случая: - Логин с действительными данными - Логин с неверными данными (неверный пароль И/ИЛИ Имя пользователя)

В java это будет работать с глобальными переменными/функциями. И я подумал, что раньше делал что-то вроде глобальных переменных javascript. Но это не работает.

Итак, у меня есть пробная функция:

    var testFunction = function(){
    console.log("I am a global function, and i am working!");
};

и моя цель - вызвать его в моем t.chain() в моем тестовом файле:

{
            type: LoginUsername, 
            target: ">>#loginviewIdemId #loginForm #pwTriggerForm #fldName",
            desc: 'Type in Username',
        },

        function(next) {
            testFunction();
            next();
        },

Когда я вызываю функцию, созданную в этом тестовом файле над цепочкой, она работает. Извините, если это какой-то базовый вопрос по javascript, но я опустошен: D

Заранее спасибо!


person adamswebspace    schedule 13.10.2017    source источник
comment
Можете ли вы опубликовать весь тестовый файл? И какую ошибку вы получаете?   -  person pagep    schedule 13.10.2017


Ответы (1)


Вы можете расширить свой класс Test, чтобы добавить служебные методы и избежать нарушений DRY. Это руководство подводит итог: https://www.bryntum.com/docs/siesta/#!/guide/extending_test_class

Давайте создадим 2 специальных утверждения, которые будут проверять нечетность переданного числа. Обычно утверждение должно проверить свое утверждение и сообщить о результате с помощью методов {@link Siesta.Test#pass} или {@link Siesta.Test#fail}.

Class('MyProject.MyTestClass', {
    isa     : Siesta.Test.ExtJS,

    methods : {

        isOdd : function (number, description) {
            if (number % 2) {
                this.pass(description);
            } else {
                this.fail(description, {
                    assertionName   : 'isOdd',
                    got             : number,
                    annotation      : 'Need odd number'
                });
            }
        },

        isEven : function (number, description) {
            if (!(number % 2)) {
                this.pass(description);
            } else {
                this.fail(description, {
                    assertionName   : 'isEven',
                    got             : number,
                    annotation      : 'Need even number'
                });
            }
        }
    }
})

В случае сбоя постарайтесь предоставить как можно больше информации о сбое и отформатируйте сообщение об ошибке в удобочитаемой форме. Дополнительные параметры см. в документации по методу {@link Siesta.Test#fail}.

Чтобы Harness использовал ваш новый тестовый класс, вы должны указать используемый тестовый класс, задав параметр конфигурации {@link Siesta.Harness#testClass}:

harness.configure({
    title       : 'Awesome Test Suite',

    testClass   : MyProject.MyTestClass,

    preload     : [
        ...
    ]
})

Тестовый класс должен загружаться сразу после файла siesta-all.js:

<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" type="text/css" href="__path_to_siesta__/resources/css/siesta-all.css">
        <script type="text/javascript" src="__path_to_siesta__/siesta-all.js"></script>

        <!-- The file with new test class -->
        <script type="text/javascript" src="lib/MyTestClass.js"></script>

        <script type="text/javascript" src="index.js"></script>
    </head>

    <body>
    </body>
</html>

Теперь вы можете использовать свои собственные утверждения или служебные методы во всех своих тестах:

describe('My test', function(t) {
    var nbr = 1;

    t.isEven(nbr); // Will fail
})
person Mats Bryntse    schedule 14.10.2017
comment
Привет, @mats, я столкнулся с новой проблемой. - person adamswebspace; 18.10.2017
comment
Я использовал способ, который вы показали, и сделал тестовый класс. С моей первой тестовой функцией (которая была тестовой функцией, которая принимает значение и выводит его с помощью console.log. Если я добавлю в класс еще один метод и буду использовать его так же, как вы делали с функцией isEven(), я получаю ошибка. Сообщение об ошибке говорит, что: isOdd не является функцией. Это даже происходит, когда я использую функцию из документов. Вы знаете, что там не так? - person adamswebspace; 18.10.2017
comment
ах теперь заработало. мне нужно было перезагрузить страницу. Извините за беспокойство! спасибо! Вы мне очень помогли - person adamswebspace; 18.10.2017