我该如何在Jasmine中编写beforeAll函数?(不使用coffeeScript)

28

我需要知道是否有一种方法可以包含或使用beforeAll函数,或类似的东西,以便我可以登录我的应用程序,然后开始测试。

目前,我将我的登录操作放在第一个测试用例(it)中。这不是一个好的做法。

如果有更好的方法来存储我的登录代码而不使用beforeAll函数,请告诉我。

我正在使用纯Jasmine,与任何其他框架如coffee-script或其他无关。

谢谢

4个回答

36

现在这件事情变得更加容易了。从Jasmine 2.1版本(发布于2014年11月14日)开始,框架中内置了一个beforeAll函数。

这里是发布说明,包含了在2.1版本中添加的所有内容。而这里是文档,解释了beforeAllafterAll函数。


4

您可以嵌套任意数量的describe函数。因此,您可以执行以下操作...

describe("General Test", function () {

    function login(){
        //This code will run once at he beginning of your script
    };

    login();

    beforeEach(function () {
        //anything in here will apply to everything in each nested describe
    });

    describe("Specific Test", function () {
        //Applied here
    });

    describe("Another Specific Test", function () {
        //And here
    });


});

1
这是否意味着 beforeEach 会在每个嵌套的 Describe 之前运行?还是在每个 it 之前运行? - pharaon450
1
它将在每个嵌套的“describe”中的每个“it”函数之前运行。 - j_buckley
3
有人能解释一下为什么BeforeAll函数是必要的吗?如果你可以在之前运行该函数(如此答案所示),它似乎是多余的,并且也不提供任何额外的语义价值。 - aaaaaa
1
@aaaaaa beforeAll() 是必要的,因为在这个例子中 login() 将在所有 spec 文件中的所有测试用例之前运行。但你真正需要的是在任意 describe 块中的所有测试用例运行之前运行 login()。假设你有另一个 spec 需要用户注销,所以它调用 logout()。无论哪个 spec 先被加载,两个文件中的所有测试都将以已登录或已注销的状态运行。 - Johnny C
4
@aaaaaa,实际上它与文档相符。beforeAll 函数在运行 describe 中所有规范之前仅调用一次,而不是在该描述块中的“裸体”函数将在运行所有规范文件中的所有规范之前运行一次,而不仅仅是在该描述块中运行。例如,如果我想为一个 describe 块使用一个mongo数据库,而另一个 describe 块使用另一个数据库,我需要使用 beforeAll() 函数,否则它们都将使用同一个数据库。 - Johnny C
显示剩余7条评论

2

请使用以下代码,并在beforeAll语句中配置您的设置。

describe("Top", function() {
     beforeAll(function() { 
            console.log("Example 1 Setup"); 
     });
     it('xyz',function(){
        console.log('Hi!')
     });
});

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接