如何从beforeEach函数访问有关当前运行的测试用例的信息?

时间:2018-02-05 17:52:39

标签: javascript node.js protractor automated-tests jasmine2.0

使用Protractor 5.1.2和Jasmine2来描述测试用例,如何在beforeEach方法中运行当前的测试用例/规范?

我想根据我正在运行的测试用例做一些不同的设置。我不想把这些测试放在不同的spec文件中,重复代码除了我想在设置中改变的一点点。

我正在寻找的例子:

...
beforeEach(() => {
  if(currentSpec/TestCase.name == "thisName") {
    // Do a particular login specific to testcase.name
  } else { 
    // Do a default login
  }
});
...

我对此的研究提出了许多过时的解决方案(2年以上),并且似乎一直在说访问当前运行的测试用例/规范是他们(量角器)试图隐藏的东西。我觉得想要在一组测试用例中对特定测试用例进行特定设置并不是一件独特的事情。我可能只是使用了错误的搜索字词。

2 个答案:

答案 0 :(得分:1)

我不确定如何使用beforeEach()做你想做的事。但是,我认为通过使用帮助文件可以获得相同的效果。这将允许您设置任何规范可以引用的公共文件,以便您可以使用一组通用功能。要进行此设置,您将:

创建一个中央文件(我称之为util.js

const helper = function(){
    this.exampleFunction = function(num){
        return num; //insert function here
    }
    this.exampleFunction2 = function(elem){
        elem.click() //insert function here
    } 
}

spec.js文件中,您将执行以下操作:

const help = require('path/to/util.js');
const util = new help();
describe('Example with util',function(){
    it('Should use util to click an element',function(){
        let elem = $('div.yourItem');
        util.exampleFunction2(elem);
    });
});

然后,您可以从任何spec文件中调用这些函数。然后,您可以将测试分成单独的spec文件,但是对于相同的部件有一组共同的功能。

另一种方法是在不创建单独文件的情况下使用本地函数 示例spec.js文件:

describe('Should use functions',function(){
    afterEach(function(){
        $('button.logout').click();
    )};
    it('Should run test as user 1',function(){
        $('#Username').sendKeys('User1');
        $('#Password').sendKeys('Password1');
        $('button.login).click();
        doStuff();
    )};
    it('Should run test as user 2',function(){
        $('#Username').sendKeys('User2');
        $('#Password').sendKeys('Password2');
        $('button.login').click();
        doStuff();
    )};
    function doStuff(){
        $('div.thing1').click();
        $('div.thing2').click();
    )};
)};

根据多篇评论的描述:

describe('Test with user 1',function(){   
   beforeEach(function(){
       //login as user 1
   });
   it('Should do a thing',function(){
       //does the thing as user 1
   });
});
describe('Test with user 2',function(){
    beforeEach(function(){
        //login as user 2
    });
    it('Should do another thing',function(){
        //does the other thing as user 2
    });
});

答案 1 :(得分:1)

beforeEach的重点是每个测试都是相同

如果你想做不同的事情,那么它们属于特定的测试。

编写辅助函数并从特定测试中调用它,如果您希望具有根据参数稍微不同的常用功能。