2015-11-02 5 views
2

У меня есть непредсказуемая страница поведения, которая зависит от изменений, которые создают разработчики. И иногда мои тесты не удались, потому что страница не была загружена. Моя структура тестового сценария выглядит следующим образом:Остановить тестирование после определенных сбоев

describe('0. first actions', function() { 
    var lib = require("../../common.js"); 
    var config = browser.params; 
    var url = config.listOfReferencesUrl, toolbar; 

    load(url, "list-of-references"); 

    beforeAll(function() { 
     // some actions on the page 
    }); 

    it('test0', function() { 
     since('test0 failed'). 
      expect(toolbar.isPresent()).toBe(true); 
    }); 

    describe('1.actions1', function() { 

    beforeAll(function() { 
     // some actions on the page 
    }); 

    it('test1', function() { 
     since('test1 failed').  
      expect(table.getRow(clientNameNum).getRowInput().isEnabled()).toBe(true); 
    }); 

    // ... another invested describes 
}); 

Если функция нагрузки:

global.load = function (url, pageType) { 
    browser.get(url); 
    if (pageType == 'list-of-references'){ 
    browser.executeScript("icms.go('WEB_INQ_PROC', 'InquiryList', null, 0)"); 
    } 
    browser.waitForAngular(); 
}; 

Интересно, если я могу создать структуру, чтобы остановить мои тесты, если страница не загружается. Но я не хочу использовать 'jasmine-bail-fast', потому что я хочу увидеть другие сбои, если страница загрузится. я пытался написать что-то вроде:

if (this.results_.failedCount > 0) { 
    // Hack: Quit by filtering upcoming tests 
    this.env.specFilter = function(spec) { 
     return false; 
    }; 
} 

Но это не работает. Я использую жасмин2. Может быть, кто-нибудь знает, как я могу его организовать?

+0

Что такое значение 'функции load' когда страница строя или успеха для загрузки? Получил ли он логическое, обещание, элемент HTML? – Freezystem

+0

@Freezystem Я обновил свой вопрос и добавил описание функции загрузки. Он просто запускает скрипт и ждет углового. –

+0

Если вы не загружаете внешнюю библиотеку, я думаю, что 'beforeAll()' на самом деле не существовало в ядре Jasmine. Вы пытались загрузить свою страницу в блок 'beforeEach()? – Freezystem

ответ

1

Вы можете определить обертку

var filter = function (fn) { 
    if (!condition) 
    throw new Error('skipped'); 

    return fn; 
} 

и использовать его на всех соответствующих describe/it блоков:

describe('...', filter(function() { 
    ... 
})); 
+0

@ estusThanks! Но у меня есть ошибка: «ReferenceError: фильтр не определен». Где я могу увидеть некоторые примеры его использования? –

+0

Вы должны определить его в своих спецификациях. 'require'' filter' или определить его как 'window.filter' (подобно тому, как угловой-макет [определяет его глобальные значения] (https://docs.angularjs.org/api/ngMock#function)). Я думаю, что это более простой и понятный подход, чем захват 'env.specFilter'. – estus