2013-12-13 10 views
9

まず、以下のコードが機能するようです。しかし、私はまだ誰もこれを行うのを見ていないので、私はこれが合法であるかどうか、そして予期せぬ不利な点を見逃しているのだろうかと思っています。分度器ジャスミンはブロック内にネストされたブロックを記述します

私は、Jasmineスタイルのdescribe/itブロックを使用している分度器でE2Eテストを作成しています。私の目標は、ページをロードし、毎回そのページをリロードせずにitテストブロックの束を実行することです(時間がかかるので)。

私が持っている構築物は次のとおりです。

describe("Homepage", function() { 

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

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

    }); 
}); 

しかし、問題は、私がテストを分離することはできません、あなたが終わるということです。

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

私は代替がちょうどこれを行うことです実現します大きいitブロックを持つ。私はどうにかして毎回beforeEachを走らせるという問題を避けたいと思っていますが、依然としてきれいに区切られたテストブロックを持つことができます。あなたはこのような複数のスペックを持っている場合は動作しません。この除く

describe("Homepage", function() { 

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

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

    }); 
}); 

:ところで


は、私もこれを試してみました。 browser.get()はテストが実行される前に順番に実行されます。

答えて

7

アサーションを小さなブロックに分割することは、いい考えです。 Jasmineは、1回だけ実行されるグローバルセットアップ機能を持つようには適用されません。 だから、多分あなたは一度だけセットアップを実行するにbeforeEachブロックをだますことができます。

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

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

これは良い考えです。他の誰かがアイデアを持っているかどうかを確認する前に、私は1日か2日待つことにしましょう。 – wlingke

+0

この特定のシナリオの 'browser.get()'を追加したい場合は、 'browser.getCurrentUrl()'で現在のページをチェックし、それを取得する前に現在のページをチェックすることもできます。 – wlingke

3

Jasmine2はスイート全体に対して一度だけ実行されますbeforeAll()とやっぱ()を持っています。

関連する問題