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

How do I access information about the currently running test case from the beforeEach function?

使用Protractor 5.1.2和Jasmine2描述测试用例,如何在beforeEach方法中得到当前testcase/spec为运行?

我想根据我运行宁的测试用例做一些不同的设置。我不想将这些测试放在具有重复代码的不同规范文件中,除了我想在设置中更改的一点点。

我正在寻找的示例:

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

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

我不确定如何用 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.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
    });
});

beforeEach 的全部意义在于它对每个测试都是 相同

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

如果您想拥有根据参数执行略有不同的事情的通用功能,请编写一个辅助函数并从特定测试中调用它。