Ich versuche, einen Komponententest zu schreiben, der bestätigt, dass $rootScope.$broadcast('myApiPlay', { action : 'play' });
aufgerufen wird. Hier
ist die myapi.js
angular.module('myApp').factory('MyApi', function ($rootScope) {
var api = {};
api.play = function() {
$rootScope.$broadcast('myApiPlay', { action : 'play' });
}
return api;
});
Und hier ist meine Einheit Test:
describe('Service: MyApi', function() {
// load the service's module
beforeEach(module('myApp'));
// instantiate service
var MyApi;
var rootScope;
beforeEach(function() {
inject(function ($rootScope, _MyApi_) {
MyApi = _MyApi_;
rootScope = $rootScope.$new();
})
});
it('should broadcast to play', function() {
spyOn(rootScope, '$broadcast').andCallThrough();
rootScope.$on('myApiPlay', function (event, data) {
expect(data.action).toBe('play');
});
MyApi.play();
expect(rootScope.$broadcast).toHaveBeenCalledWith('myApiPlay');
});
});
Hier ist der Fehler, den ich bekommen habe, während grunt test
ausgeführt wird:
PhantomJS 1.9.7 (Windows 7) Service: MyApi should broadcast to pause FAILED
Expected spy $broadcast to have been called with [ 'myApiPlay' ] but it was never called.
Ich habe auch mit expect(rootScope.$broadcast).toHaveBeenCalled()
versucht und ich habe einen ähnlichen Fehler: Expected spy $broadcast to have been called.
.
Ich möchte überprüfen, dass diese Methode tatsächlich mit den richtigen Parametern aufgerufen wurde.
Vielen Dank!
Haben Sie müssen nur die Reihenfolge wechseln? Sie müssen möglicherweise erwarten, bevor es tatsächlich aufgerufen wird, in Ihrem Fall rufen Sie es an und erwarten es dann. Sie können diesen Anruf auch bestätigen. – hassassin
Ich habe den Auftrag umgestellt, gleicher Fehler. – Andrea