Dies mag ein Duplikat sein, aber ich habe mir hier viele andere Fragen angeschaut und sie vermissen gewöhnlich, wonach ich suche. Sie sprechen meist von einem Service, den sie selbst geschaffen haben. Das kann und habe ich getan. Ich versuche zu überschätzen, was eckig mit meinem Spott spritzt. Ich dachte, es wäre das gleiche, aber aus irgendeinem Grund, wenn ich durch den Code gehe, ist es immer der eckige $ cookieStore und nicht mein Spott.Wie spotze ich einen Angular Service mit Jasmin?
Ich habe sehr begrenzte Erfahrung mit Jasmin und angularjs. Ich komme von einem C# Hintergrund. Ich schreibe normalerweise Komponententests moq (Mocking Framework für C#). Ich verwende etwas wie dieses
[TestClass]
public PageControllerTests
{
private Mock<ICookieStore> mockCookieStore;
private PageController controller;
[TestInitialize]
public void SetUp()
{
mockCookieStore = new Mock<ICookieStore>();
controller = new PageController(mockCookieStore.Object);
}
[TestMethod]
public void GetsCarsFromCookieStore()
{
// Arrange
mockCookieStore.Setup(cs => cs.Get("cars"))
.Return(0);
// Act
controller.SomeMethod();
// Assert
mockCookieStore.VerifyAll();
}
}
ich verspotten wollen die $ cookieStore Service zu sehen, die ich in einem meiner Controller verwenden.
app.controller('PageController', ['$scope', '$cookieStore', function($scope, $cookieStore) {
$scope.cars = $cookieStore.get('cars');
if($scope.cars == 0) {
// Do other logic here
.
}
$scope.foo = function() {
.
.
}
}]);
Ich möchte sicherstellen, dass die $ cookieStore.get Methode mit einer ‚Garage‘ Argument aufgerufen wird. Ich möchte auch kontrollieren können, was es zurückgibt. Ich möchte es 0 zurückgeben und dann muss mein Controller eine andere Logik machen.
Hier ist mein Test.
describe('Controller: PageController', function() {
var controller,
scope,
cookieStoreSpy;
beforeEach(function() {
cookieStoreSpy = jasmine.createSpyObj('CookieStore', ['get']);
cookieStoreSpy.get.andReturn(function(key) {
switch (key) {
case 'cars':
return 0;
case 'bikes':
return 1;
case 'garage':
return { cars: 0, bikes: 1 };
}
});
module(function($provide) {
$provide.value('$cookieStore', cookieStoreSpy);
});
module('App');
});
beforeEach(inject(function(_$httpBackend_, $rootScope, $controller) {
scope = $rootScope.$new();
controller = $controller;
}));
it('Gets car from cookie', function() {
controller('PageController', { $scope: scope });
expect(cookieStoreSpy.get).toHaveBeenCalledWith('cars');
});
});
+1 Danke für die Mühe. und Ort ist der nächste, den ich brauchte :) Lass dich wissen, ob es funktioniert hat. – uriDium