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);
}
}