假设我有一个简单的页面,点击页面标题可以切换页面内容的可见性(真实吗?否,但它是一个包含DOM元素的简单测试)。我会告诉你HTML和JS的实现,因为我确信你可以在你的脑海中看到它。茉莉花中的“上下文”和“触发器”的分离
我试图用茉莉花来测试这个,我正在运行代码重复问题,主要是围绕上下文的分离(这个测试如何与它的bretheren不同)以及触发器(正在测试的动作和结果捕获)
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#VS Javascript或MSpec VS任何这里,它只是提供了我之后的代码重用示例。我也跳过了MSpec的一些功能,以保持示例简单。