Через некоторое время, когда я обдумываю все это, мне кажется, это хорошо работает ...
// before each I set everything up
var dlcb = {
setup: {
chart: chart
},
download: jasmine.createSpy('download')
};
var self = {};
['toCSV', 'toJSON', 'toXLSX'].forEach(function(name) {
self[name] = jasmine
.createSpy(name, function(a, cb) {
cb.bind(dlcb)(true);
})
.and.callThrough();
});
// -----
it('should call toJSON on export', function() {
var exp = chart.export.menu[0].menu[0].menu[0];
/*
exp = {
label: 'JSON',
click: function() {
this.toJSON({}, function(data) {
this.download(
data,
'application/json',
this.setup.chart.$exportName + '.json'
);
});
}
}
*/
var self = { toJSON: jasmine.createSpy() };
exp.click.bind(self)();
expect(exp.label).toEqual('toJSON');
expect(self.toJSON).toHaveBeenCalled();
expect(dlcb.download).toHaveBeenCalledWith(true, 'application/json', 'vp-chart-export.json');
});