2013-12-13 44 views
9

首先,下面的代码似乎工作。然而,我还没有看到任何人这样做,所以我想知道这是否合法,如果我缺少不可预见的缺点。量角器茉莉描述嵌套在它块内的块

上下文是我正在写一个使用茉莉花式描述/它块的量角器的E2E测试。我的目标是加载一个页面并运行一堆it测试块,而不必每次重新加载该页面(因为它耗时)。

的结构我是:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //loads the page 
    }); 

    it('elements', function() { 
     describe('test group', function() { 
      it('test 1', function() { 
       //run stuff 1 
      }); 

      it('test2', function() { 
       //run stuff 2 
      }); 
     }) 
    }); 
}); 

我认识的另一种方法是仅仅做到这一点:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //goes to homepage 
    }); 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

但问题是,我不能分开的考验,你最终与一个大的it块。我想以某种方式避免在每次运行之前运行的问题,但仍然能够有一个很好的分离集合测试块。


顺便说一句,我也尝试过这样的:

describe("Homepage", function() { 

    browser.get("/"); //goes to homepage 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

除了这个,当你有多个规格这样是行不通的。在测试运行之前,browser.get()全都依次运行。

回答

7

将断言分解为更小的块肯定是一个好主意。 茉莉花不会出现只有一次运行的全局设置功能。 因此,也许你可以欺骗beforeEach块到只运行安装一次:

describe("Homepage", function() { 
    var pageLoaded = false; 

    beforeEach(function() { 
     if (! pageLoaded) { 
      browser.get("/"); 
      pageLoaded = true; 
     } 
    }); 
}); 
+0

这是一个好主意。让我等一两天再接受,看看其他人是否有任何想法。 – wlingke

+0

我也想为'browser.get()'这个特定的场景添加一个'''',你也可以用'browser.getCurrentUrl()'检查你正在访问的页面,并在“获取”之前检查当前页面。 – wlingke

3

Jasmine2有beforeAll()和整个套件运行一次毕竟()。