假设我有一个简单的页面,通过单击页面标题来切换页面内容的可见性(现实吗?不,但这是一个包含 DOM 元素的简单测试)。我会为您省去 HTML 和 JS 实现,因为我相信您会在脑海中看到它。
我正在尝试使用 jasmine 对此进行测试,但遇到了代码重复问题,主要是围绕上下文的分离(此测试与它的兄弟不同)和触发器(正在测试的操作和捕获结果)
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 的一些功能以保持示例简单。