【发布时间】:2014-04-29 01:59:49
【问题描述】:
我真的不确定如何进行测试? (间谍?)
function reloadPage() {
$('#logo').click(function() {
location.reload();
})
}
任何建议都会很棒!
【问题讨论】:
标签: javascript ruby-on-rails-3 jasmine
我真的不确定如何进行测试? (间谍?)
function reloadPage() {
$('#logo').click(function() {
location.reload();
})
}
任何建议都会很棒!
【问题讨论】:
标签: javascript ruby-on-rails-3 jasmine
您可能不确定如何测试这段代码的原因是因为它在做两件不同的事情,您应该将它分成更小的块。
我在这里看到两个不同的功能:
那么为什么不这样分解逻辑呢?
function reloadPage() {
location.reload();
}
function bindEvents() {
$('#logo').click(reloadPage);
}
现在您可以使用 Spies 单独测试它们:
describe('when the logo is clicked', function() {
var logo;
var handlers;
beforeEach(function() {
handlers = {
locationReload: location.reload, // handle for location.reload()
reloadPage: reloadPage // handle for your reloadPage()
};
logo = $('#logo').click(reloadPage);
// attach Spy on reloadPage() and let the function call through
spyOn(handlers, 'reloadPage').and.callThrough();
// attach Spy on location.reload()
spyOn(handlers, 'locationReload');
});
it('will execute reloadPage function', function() {
logo.trigger('click');
expect(handlers.reloadPage).toHaveBeenCalled();
});
it('will reload the page', function() {
logo.trigger('click');
expect(handlers.locationReload).toHaveBeenCalled();
});
afterEach(function() {
// clean up event bindings after each test
logo.off('click');
});
});
没有太多需要测试reloadPage 处理程序是否正确添加到#logo 的点击事件,因为该测试模拟.click() 并检查reloadPage 是否被调用。
因此很可能您只需要拥有it('will reload the page') 规范,而不是两者兼有。
【讨论】: