1
我想单元测试一个订阅ko.observable
的Knockout JS扩展函数(导致它在值更改时运行)。为了测试它是否正常工作,我需要验证在ko.observable
更改时执行扩展程序功能。断言函数被执行
这里是我的测试,到目前为止:
test("ko.extenders.addFieldTrackingGA", function() {
//arrange
var testObservable = ko.observable(1).extend({
addFieldTrackingGA: "Some button was clicked"
});
//act
testObservable(5);
//assert
});
我的问题是:我怎么可以断言,当观察到的改变是ko.extenders.addFieldTrackingGA被执行?
这里是我想确认执行代码:
Knockoutextension:
ko.extenders.addFieldTrackingGA = function (target, option) {
target.subscribe(function (newValue) {
if (newValue) {
qb.Utils.Analytics().trackEvent(qb.Utils.Analytics().product,
"form click",
option,
false);
}
});
return target;
};
qb.analystics:
/**
* Event = e.g. 'trackEvent'
* Category = e.g. 'error_message_home'
* Action = fieldName
* Label = 'some message'
* ignoreMultiple = false | true | {blank} - if true, gtm actions that are fired more than once will be ignored, defaults to true.
*/
var _pushGTM = function (event, category, action, label, ignoreMultiple) {
if (typeof dataLayer !== 'undefined') { // Add test for dataLayer as breaking Qunit
ignoreMultiple = ignoreMultiple === undefined ? true : ignoreMultiple;
if (_.contains(pushedGTM, action + label) && ignoreMultiple) { // Make sure event doesn't get fired more than once, only fire it the first time
return;
}
var gtmObject = {
'event': event,
'eventDetails.category': category, // Push the value depending on the form (car/house/contents)
'eventDetails.action': action, // Push the form field name.(If there is no field name push "No_field"
'eventDetails.label': label // Please push the exact error string.
}
if (ignoreMultiple) {
pushedGTM.push(action + label);
}
_pushGTMObject(gtmObject);
}
}