Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从beforeach函数中访问有关当前正在运行的测试用例的信息?_Javascript_Node.js_Protractor_Automated Tests_Jasmine2.0 - Fatal编程技术网

Javascript 如何从beforeach函数中访问有关当前正在运行的测试用例的信息?

Javascript 如何从beforeach函数中访问有关当前正在运行的测试用例的信息?,javascript,node.js,protractor,automated-tests,jasmine2.0,Javascript,Node.js,Protractor,Automated Tests,Jasmine2.0,使用量角器5.1.2和Jasmine2来描述测试用例,如何在beforeach方法中运行当前的测试用例/规范 我想根据正在运行的测试用例进行一些不同的设置。我不想把这些测试放在不同的规范文件中,重复代码,除了我想在设置中更改的一点 我正在寻找的示例: ... beforeEach(() => { if(currentSpec/TestCase.name == "thisName") { // Do a particular login specific to testcase.

使用量角器5.1.2和Jasmine2来描述测试用例,如何在beforeach方法中运行当前的测试用例/规范

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

我正在寻找的示例:

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

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

我不知道如何使用
beforeach()
实现您想要的功能。但是,我认为您可以通过使用帮助文件获得相同的效果。这将允许您设置任何规范都可以引用的公共文件,以便您可以使用一组公共函数。要设置此设置,您将:

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

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
    });
});

我不知道如何使用beforeach()执行您想要的操作。但是,我认为您可以通过使用帮助文件获得相同的效果。这将允许您设置任何规范都可以引用的公共文件,以便您可以使用一组公共函数。要设置此设置,您将:

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

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
    });
});

每次测试之前的
的全部要点是,每次测试都是相同的

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


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

每个测试之前的
的要点是,每个测试都是相同的

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


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

这是一个很好的帮助器文件示例,并将其拉入,谢谢您。但我认为我的问题解释得很糟糕,因为我在寻找一种从beforeach方法访问测试实例本身的方法。谢谢你@谢谢,据我所知,
beforeach
做不到你所描述的。允许在一个spec文件中有多个
描述
,因此可以检查一下,这可能对您尝试执行的操作有用。您可以在描述中嵌套beforeach吗?我不清楚那里的联系。我知道你可以去。哈哈!经过测试,它工作正常,逻辑也工作得更好。谢谢你给我指明了方向。如果你能写下这一点,在每一个特定的描述之前嵌套,那将是我一直在寻找的答案。谢谢大家!@美国休斯顿编辑的答案包括嵌套循环。对于将来,可能最好将其拆分为单独的文件,但如果它可以工作,这是一个很好的帮助文件示例,可以将其拉入,因此感谢您。但我认为我的问题解释得很糟糕,因为我在寻找一种从beforeach方法访问测试实例本身的方法。谢谢你@谢谢,据我所知,
beforeach
做不到你所描述的。允许在一个spec文件中有多个
描述
,因此可以检查一下,这可能对您尝试执行的操作有用。您可以在描述中嵌套beforeach吗?我不清楚那里的联系。我知道你可以去。哈哈!经过测试,它工作正常,逻辑也工作得更好。谢谢你给我指明了方向。如果你能写下这一点,在每一个特定的描述之前嵌套,那将是我一直在寻找的答案。谢谢大家!@美国休斯顿编辑的答案包括嵌套循环。对于未来,可能最好将其拆分为单独的文件,但如果它能工作,我理解你的观点,它是一样的,而且大部分是一样的。除了登录。一个使用默认的登录信息,另一个使用不同的用户状态,但其余的设置都是相同的,只是需要一个不同的令牌。就像我有了A->B->C->D,然后我把A分为A1和A2。我想让B->D保持不变。在同一个地方,在每个之前,为了逻辑的缘故。忽略编码理念,难道没有一种方法可以访问关于当前运行的测试用例的信息吗?我理解你的观点,它是一样的,而且大部分是一样的。除了登录。一个使用默认的登录信息,另一个使用不同的用户状态,但其余的设置都是相同的,只是需要一个不同的令牌。就像我有了A->B->C->D,然后我把A分为A1和A2。我想让B->D保持不变。在山姆