2016-03-21 5 views
1

私はこれをどこかで読んだことは確かですが、今はドキュメントを見つけることができません。同じdescribeブロックに2つのbeforeEachブロックがある場合は、連続して動作することが保証されていますか? IE:あなたはSuite.jsにジャスミンのソースコードを見てみた場合同じスコープ内のbeforeEachブロックは順番に実行されますか?

describe("foo", function(){ 
    beforeEach(function(){ 
    print("I'm always first!"); 
    } 

    beforeEach(function(){ 
    print("I'm always second!"); 
    } 
} 
+1

なぜそれを使用しないのですか? – Pavlo

+0

@Pavlo私のユースケースは少し複雑です(Angular 'module' /' inject'sなど)。 –

+0

はい、それは順次実行されます。それ以外の場合は、テストケースの直後に、注入モジュールを使用してbeforeEachを書くことができます。 –

答えて

1

http://jasmine.github.io/2.0/introduction.htmlからの呼び出しは、任意のレベルで定義された仕様で、ネストすることができます。これにより、スイートを関数のツリーとして構成することができます。 specが実行される前に、Jasmineは各beforeEach関数を実行するツリーをの順に歩きます。 specが実行された後、JasmineはafterEach関数を同様に実行します。

私の現在のアプリケーションのサンプルコードです。

nodeApp私はそのはerror.Because nodeAppを投げsecond beforeEachbeforeEach(module("nodeApp"));を置く場合

describe("\n\nuser registration form testing", function() { 

    beforeEach(module("views/createuser/createuser.html"), function() { 

    }); 

    describe("\n\nUser createtion form should have valid data", function() { 
     beforeEach(module("nodeApp")); 
     beforeEach(inject(function($rootScope, $compile, $controller, $templateCache) { 

     })) 

    });  
}); 

メインモジュールですべてのサービスを注入するための責任を負うモジュールです。 したがって、後で2回目の注射が可能ですbeforeEach

2

それは彼らが追加されているよりも、逆の順序でそれらを追加します。

Suite.prototype.beforeEach = function(fn) { 
    this.beforeFns.unshift(fn); 
}; 

次にEnv.jsにあなたは彼らが実行される前に、彼らは逆になっていることがわかります。彼らはアレイに保存されている全体の時間として

var beforeAndAfterFns = function(suite) { 
    return function() { 
    var befores = [], 
     afters = []; 

    while(suite) { 
     befores = befores.concat(suite.beforeFns); 
     afters = afters.concat(suite.afterFns); 

     suite = suite.parentSuite; 
    } 

    return { 
     befores: befores.reverse(), 
     afters: afters 
    }; 
    }; 
}; 

、私はそう、彼らが実行されていると言うでしょう順次すべての時間。説明する

+0

本当にですか?彼らは逆順にそれらを配置します...それらを逆にして、通常の順序で終わる?どうしたの?いずれにしても、彼らが順番に実行されている限り、私はすべての細かいことを推測します。 –

+0

私は本当になぜこのように行うのか分からない。コードではbeforeEachとafterEachはシフトされず、beforeAllとafterAllは通常配列にプッシュされます。 処理の前に、実際にbeforeEachの順序を逆にします。つまり、宣言された順序と同じ順序で実行する必要があります。afterEachに対してこれを保持するため、afterEachは宣言された順序とは異なる順序で実行されます。 –

関連する問題