JasmineJSを使用してテストを作成する場合、beforeEach/afterEachコードと同様のテストが多数あります。
JasmineJSテストスイートを使用して継承モデルを実装する方法はありますか?
すべてのテストを1つのdescribe
にグループ化できますが、この場合、すべてのテストを含む1つの巨大なJSファイルで終わります。
各ページのテストを分割したいと思います。
以下に例を示します。
describe('Services Page', function() {
beforeEach(function() {
login_as_admin()
})
beforeEach(function() {
browser().navigateTo('/services')
})
if('Some test for services page', function() {})
afterEach(function() {
logout()
})
})
describe('Administrators Page', function() {
beforeEach(function() {
login_as_admin()
})
beforeEach(function() {
browser().navigateTo('/administrators')
})
if('Some test for administrators page', function() {})
afterEach(function() {
logout()
})
})
これは部分的に検討されていると思います このブログ投稿で そして ここで回答済み
再利用可能なコード:
function sharedSetup(startPage) {
beforeEach(function() {
login_as_admin();
browser().navigateTo(startPage);
});
afterEach(function() {
logout();
});
};
それの使い方:
describe('Services Page', function() {
sharedSetup('/services');
it('Some test for services page', function() {});
});
describe('Administrators Page', function() {
sharedSetup('/administrators');
it('Some test for administrators page', function() {});
});
すべてのスイートでこれを実行する場合は、beforeEach
にafterEach
またはtopSuite
関数を登録できます。
jasmine.getEnv().topSuite().beforeEach({fn: function() {
//log in as admin
}});
一部のスイートにのみ適用する場合は、サブスイートで作業できます。
describe("as_admin", function() {
beforeEach(function() {
//log in as admin
});
describe('Services Page',function() {...});
describe('Administrators Page',function() {...});
}
Jasmineでは、beforeEach
とafterEach
をdescribe
呼び出しの外側に置くことができます。このようにして、すべての仕様に対してグローバルなセットアップと分解を行うことができます。 logout()
呼び出しは、グローバルティアダウンの適切な候補のようです。すべての仕様が管理者としてログインする場合は、グローバルスコープにも移動できます。
すべてではありませんが、一部の仕様で使用されているものについては、login_as_admin()
のようなメソッドを持つことが、そのロジックを1か所に統合するための最良の方法のようです。
参照:( Pivotal Labsブログ:Davis W. Frank )
彼は、さまざまな個々のスイートのパラメーターで呼び出される関数で共有機能を収集することについて説明しています。各スイート内でこの関数を呼び出すと、共通のセットアップ/構成が実行されます。
テストをファイル間で分割することに関して。共有関数を含むファイルは、テストがブラウザベースの場合は_<script>
_タグで各ページに含めることができ、テストがノードベースの場合は上部近くのrequire(...)
で含めることができます。その後、テストを個別に実行できますが、一度だけ定義される共有セットアップを使用します。