これは重複しているかもしれませんが、私はここで他の多くの質問を見てきました。彼らは通常、私が何らかの形で探しているものを見逃しています。彼らは、彼ら自身が作り出したサービスについて話しています。私がやり遂げることができること。私はどの角度が私のモックで注入されているかを無効にしようとしています。私はそれが同じだろうと思ったが、何らかの理由でコードをステップ実行すると、常に角の$ cookieStoreであり、私のモックではない。ジャスミンを使用してAngularサービスを模擬するにはどうすればよいですか?
私はジャスミンとangularjsでの経験が非常に限られています。私はC#の背景から来た。私は通常単体テストのmoq(C#のフレームをモックする)を書いています。私は私が私のコントローラのいずれかで使用$は、cookiestoreサービスをモックたいこの
[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();
}
}
のようなものを見に使用しています。
app.controller('PageController', ['$scope', '$cookieStore', function($scope, $cookieStore) {
$scope.cars = $cookieStore.get('cars');
if($scope.cars == 0) {
// Do other logic here
.
}
$scope.foo = function() {
.
.
}
}]);
私は$ cookieStore.get方法が「ガレージ」引数で呼び出されることを確認します。私はまた、それが戻ってくるものを制御できるようにしたい。私はそれが0を返すようにしたい、そして、私のコントローラは他のロジックをしなければならない。
ここは私のテストです。
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努力をいただきありがとうございます。場所は私が必要とした次のものです:)それが働いた場合はお知らせください。 – uriDium