2016-05-17 7 views
2

Ich habe den folgenden Code in einer Datei mit dem Namen options.js. Ich muss es mit Jasmine verspotten. Ich muss testen, ob chrome.storage.local.set aufgerufen wird, wenn save Funktion aufgerufen wird.Mock chrome.storage.local Funktionen mit Jasmine

In der Spezifikationsdatei habe ich den folgenden Code. Aber es ruft nicht die Chrome-Funktion in options.js Datei. Kann jemand auf den Fehler hinweisen?

beforeEach(function() { 
    ctrl = new OptionCtrl(scope); 
    chrome: { 
     storage: { 
     local: { 
      set: function() { 
      } 
     } 
     } 
    } 
    }); 

    it('should call storage on save', function() { 
    spyOn(chrome.storage.local, 'set').and.callThrough(); 
    ctrl.save({data: 'check'}, 'check'); 
    expect(chrome.storage.local.set).toHaveBeenCalled(); 
    }); 

Update 1: Funktionsimplementierung

save(data, successMessage) { 
    chrome.storage.local.set(data, (error) => { 
     if (error) { 
     this.status('Error Occurred. Please refresh.', 1000, 100, 'danger'); 
     } else { 
     this.status(successMessage, 1000, 100, 'success'); 
     } 
    }); 
    } 

Link to the options.js file speichern - Gewicht: 122

+0

Was ist die Implementierung für 'ctrl.save()' Methode? –

+0

'save' ist eine Funktion der Klasse' OptionCtrl', die 'chrome.storage.local.set (data, callback) aufruft' –

Antwort

1

Stubbing in Jasmin ist einfach wie:

var chrome = { 
 
    storage: { 
 
    local: { 
 
     set: function() {} 
 
    } 
 
    } 
 
} 
 

 
function OptionCtrl() { 
 
    this.save = function(data, callbackStr) { 
 
    chrome.storage.local.set(data) 
 
    } 
 
} 
 

 
describe('OptionCtrl', function() { 
 
    var ctrl; 
 

 
    beforeEach(function() { 
 
    ctrl = new OptionCtrl({}); 
 
    }); 
 

 
    it('calls storage on save', function() { 
 
    spyOn(chrome.storage.local, 'set').and.callThrough(); 
 
    var dataStub = { 
 
     data: 'check' 
 
    } 
 

 
    ctrl.save(dataStub, 'check'); 
 

 
    expect(chrome.storage.local.set).toHaveBeenCalledWith(dataStub); 
 
    }); 
 

 
})
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" /> 
 
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script>

+1

Ich bekomme immer noch einen fehlgeschlagenen Test. Es heißt, Spion heißt nicht. –

+0

@ankit_m Wahrscheinlich haben Sie in Tests keinen Zugriff auf Chrome API. ( –

Verwandte Themen