beforeAll和beforeEach套件而不是spec

时间:2017-02-20 15:23:03

标签: node.js angular jasmine protractor

我正在使用量角器5编写一些e2e测试。我想要实现的是执行整个测试,共享设置和特定设置(用于测试组)。

我收到了以下代码:

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 allbefore/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

是否有可能获得我期望的执行流程?

2 个答案:

答案 0 :(得分:1)

我想这就是Protractor的设计工作原理。提出了一个问题,以跟踪beforeAll()在父级描述块中的任何beforeEach()之前运行的情况

检查完整的discussion here

  

使用当前的实现(如果我理解正确),它只是   有一个单一的beforeAll真的很有意义,这应该是   在任何描述块之外,或在最外层的顶部   描述块。也就是说,在我的第二次之前没有任何意义   位于它的位置。

答案 1 :(得分: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() - 它们可能更适合您而不是茉莉花功能

你可能想看看jasmine记者,以防你需要以某种方式使用测试名称,测试结果,套件结果,并且可能是功能之前/之后的良好替代品。它们很容易创建和使用,请查看:

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