ページ タイトルをクリックすると、ページ コンテンツの表示が切り替わる単純なページがあるとします (現実的ですか? いいえ、DOM 要素を含む単純なテストです)。HTML と JS の実装については、頭の中で理解できると思いますので割愛します。
私はジャスミンを使用してこれをテストしようとしていますが、主にコンテキストの分離 (このテストが兄弟とどのように異なるか) とトリガー (テストされているアクションと結果のキャプチャ) に関するコードの重複の問題に遭遇しています。 )
describe("Home", function () {
describe("Selecting the page title", function () {
beforeEach(function () {
loadFixtures('Home.fixture.htm');
});
describe("when page content is visible", function () {
it("should hide page content", function () {
$('#pageTitle').trigger('click');
expect($('#pageContent')).toBeHidden();
});
});
describe("when page content is hidden", function () {
it("should show page content", function () {
$('#pageContent').hide();
$('#pageTitle').trigger('click');
expect($('#pageContent')).toBeVisible();
});
});
});
});
コードの重複を避けるために、トリガー(この場合は「クリック」の発生) をコンテキスト(共有 = フィクスチャの読み込み、特定 = ページ コンテンツの非表示) から分離するにはどうすればよいですか?
それが役立つ場合は、MSpec (.NET のコンテキスト/仕様フレームワーク) で行うことを次に示します。
[Subject("Home")]
class when_selecting_the_page_title_when_page_content_is_visible : HomeContext
{
It should_hide_page_content = () =>
// Assert that page content is hidden
}
[Subject("Home")]
class when_selecting_the_page_title_when_page_content_is_hidden : HomeContext
{
Establish context = () =>
// Hide page content
It should_show_page_content = () =>
// Assert that page content is visible
}
class HomeContext
{
Establish context = () =>
// Load the fixture
Because of = () =>
// Fire the event
}
免責事項: ここでは、C# と Javascript の違いや MSpec との違いを議論しようとしているわけではありません。コードの再利用の例を示しているだけです。また、例を単純にするために、MSpec の一部の機能を省略しています。