Javascript 在(';success';)或(';error';)上触发clipboard.js以对其进行单元测试
我使用jasminejquery进行单元测试。我有以下代码:Javascript 在(';success';)或(';error';)上触发clipboard.js以对其进行单元测试,javascript,jquery,unit-testing,jasmine,jasmine-jquery,Javascript,Jquery,Unit Testing,Jasmine,Jasmine Jquery,我使用jasminejquery进行单元测试。我有以下代码: (function() { $(document).ready(copyToClipboard); function copyToClipboard(){ var clipboard = new Clipboard('#d_clip'); clipboard.on('success', function(e) { $(e.trigger).text("Copied!"); e.cle
(function() {
$(document).ready(copyToClipboard);
function copyToClipboard(){
var clipboard = new Clipboard('#d_clip');
clipboard.on('success', function(e) {
$(e.trigger).text("Copied!");
e.clearSelection();
setTimeout(function() {
$(e.trigger).text("Copy");
}, 2500);
});
clipboard.on('error', function(e) {
$(e.trigger).text("Error copying");
setTimeout(function() {
$(e.trigger).text("Copy");
}, 2500);
});
}
})();
我已经试过了:
beforeEach(function() {
setFixtures("<button type='button' id='d_clip'>Copy</button>")
clipboard = new Clipboard('#d_clip');
});
it('should change text to copied', function() {
spyOn(clipboard,'on');
$('#d_clip').trigger('click');
expect($('#d_clip').text()).toEqual('Copied!')
});
beforeach(函数(){
固定装置(“副本”)
剪贴板=新剪贴板(“d#U剪辑”);
});
它('应将文本更改为已复制',函数(){
间谍(剪贴板,'on');
$('d#u clip')。触发器('click');
expect($('d#u clip').text()).toEqual('Copied!')
});
但我得到了这个错误:
“复制”应等于“复制!”
当我手动点击时,它工作。当我执行$('d#u clip')时,它也可以工作代码>在Chrome开发者控制台上
看起来剪贴板没有为单元测试做任何事情。我不知道该怎么做
我想测试什么?
我想触发单击,确保文本在成功时为“复制!”,在出错时为“复制错误”
这是基于Ruby on Rails的,因此我运行JS单元测试如下:
rake jasmine:ci
要直接回答您的问题,我会试试。它允许您的规范是异步的。(请注意,此操作不需要间谍。)
但是,从样式角度来看,我建议您将其分为两个较小的规范,一个测试触发器是否从copyToClipboard()
调用,另一个直接调用回调(提取它是一个变量)并检查它是否更新值。对我来说,将两者结合起来就像是一个集成测试。在没有测试的情况下单击它是否有效,以及它如何运行测试?是的,单击它时有效。它甚至可以在我执行$('d#u clip')时工作。我在RubyonRails上做这件事,所以我做了rakejasmine:ci
it("should change text to 'copied'", function(done) {
$('#d_clip').trigger('click');
clipboard.on('success', function() {
expect($('#d_clip').text()).toEqual('Copied!')
done();
});
});