2017-02-20 14 views
2

Я пишу несколько тестов e2e с использованием транспортиратора 5. То, что я пытаюсь достичь, - это выполнить целые тесты, которые поделились настройкой и конкретной настройкой (для групп тестов).beforeAll и beforeEach suite вместо spec

Я получил следующий код:

Base.ts:

beforeAll(() => { 
    console.log("before all base"); 
}); 

beforeEach(()=> { 
    console.log("before each base"); 
}); 

afterEach(() => { 
    console.log("after each base") 
}); 

afterAll(() => { 
    console.log("after all base"); 
}); 

TestSuite1.ts:

require('./Base'); 

describe("test suite 1",() => { 

    beforeAll(() => { 
     console.log("before all 1"); 
    }); 

    beforeEach(()=> { 
     console.log("before each 1"); 
    }); 

    afterEach(() => { 
     console.log("after each 1") 
    }); 

    afterAll(() => { 
     console.log("after all 1"); 
    }); 


    it("test 1",() => { 
     console.log("test 1 1"); 
    }); 

    it("test 2",() => { 
     console.log("test 1 2"); 
    }); 
}); 

TestSuite2.ts:

require('./Base'); 

describe("test suite 2",() => {  
    it("test 1",() => { 
     console.log("test 2 1"); 
    }); 

    it("test 2",() => { 
     console.log("test 2 2"); 
    }); 
}); 

и conf.ts :

var testsTimeout = 3600000; 

export let config: Config = { 
    framework: 'jasmine', 
    capabilities: { 
    browserName: 'chrome' 
    }, 
    specs: ['test/TestSuite1.js', 'test/TestSuite2.js'], 
    seleniumAddress: 'http://localhost:4444/wd/hub', 

    noGlobals: true, 
    allScriptsTimeout: testsTimeout 
}; 

Я хотел бы получить следующий вывод:

before all base 
before each base 

before all 1 
before each 1 
test 1 1 
after each 1 
before each 1 
test 1 2 
after each 1 
after all 1 

after each base 
before each base 

test 2 1 
test 2 2 

after each base 
after all base 

Unfornatelly мой before/after all и before/after each сгруппированы вместе и печатается следующим образом:

before all base 
before all 1 

before each base 
before each 1 
test 1 1 
after each 1 
after each base 

.before each base 
before each 1 
test 1 2 
after each 1 
after each base 

.after all 1 

before each base 
test 2 1 
after each base 

.before each base 
test 2 2 
after each base 

.after all base 

Можно ли получить поток выполнения, который я ожидать?

ответ

1

Возможно, ваша функция будет выполнена до/после всего в вашем номере.

Идея поставить beforeAll()afterAll() или beforeEach()afterEach() в файл конфигурации транспортир в - в onPrepare() разделе.

Это может выглядеть следующим образом:

module.exports.config = { 
    //somewhere in your config 
    onPrepare: function() { 
     beforeEach(function() { 
      //This will be executed before EVERY 'it' in each specfile 
     }) 

     beforeAll(function() { 
      //This will be executed before EVERY 'describe' in each specfile (even before nested describes) 
     }) 
    } 
} 

Также проверьте другие варианты в транспортир конфигурации: onComplete()afterLaunch() - они могли бы работать лучше для вас вместо жасмин функций

Вы можете захотеть взглянуть на репортеров жасмин, в случае, если вам нужно как-то работать с именем теста, результатом теста, результатом набора и быть хорошей альтернативой функциям до/после.Они довольно легко создавать и использовать, проверить это:

https://jasmine.github.io/edge/custom_reporter.html

+0

Я просто проверил ваш ответ. Unfornatelly добавляет '' 'beforeAll''' в файл конфигурации, вызывает выполнение этого метода ТОЛЬКО перед целым пакетом. Другими словами, поток выполнения: '' 'config beforeAll''' ->' '' описывать 1 '' '->' '' it 1 1''' -> '' 'it 1 2'''> '' 'описать 2''' ->' '' it 2 1''' -> '' 'it 2 2''''>' '' config afterAll''' –

1

Я предполагаю, что это - то, как Протрактор предназначен для работы. Возникла проблема, которая была поднята для отслеживания сценария, в котором beforeAll() работает до любого beforeEach() в родительском описании. Блок

Отметьте discussion here.

С текущей реализацией (если я правильно понимаю), это только действительно имеет смысл иметь один beforeAll, и это должно либо быть вне какого-либо описания блока, или в верхней части внешней описания блок. то есть не имеет смысла для моего 2-го до того, как будет , где он находится.

+0

Таким образом, нет никакого способа, чтобы запустить часть кода перед группой тестов (окруженных '' 'describe''')? –