簡體   English   中英

如何為角度控制器和服務編寫茉莉花測試?

[英]How can I write jasmine test for angular controller and service like this?

我被困了好幾個小時,這是因為我是Jasmine和Angularjs的新手。 基本上,我有這個控制器。

angular.module('toadlane.controllers', []).
    controller('MainController', function($scope, $http, SomeService) {

        var promise = SomeService.getObjects();

        promise.then(function(data) {
            if(data.length > 0) {
                $scope.objs = data;
            } else {
                $scope.message = "Please come back soon";
            }
        });
    });

如何編寫Jasmine測試來模擬SomeService來存根data並模擬是否有數據, scope的長度不應為0,如果data為[]則消息應為“請盡快回來”。

'use strict';

describe('controllers', function () {
    var scope, someService;
    beforeEach(module('services'));
    beforeEach(module('controllers'));
    beforeEach(inject(function (SomeService) {
        someService = SomeService;

        var callback = jasmine.createSpy();
        someService.getObjs().then(callback);
    }));

    it('should return some objs', inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();

        expect($controller('MainController', {$scope: scope, SomeService : someService})).toBeTruthy();

        expect(scope.objs.length).toEqual(2);
    }));

    it('should return no objs', inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();

        expect($controller('MainController', {$scope: scope, SomeService : someService})).toBeTruthy();


        expect(scope.message).toEqual("Please come back soon");
    }));

});

這些測試沒有完成,因為我不知道如何存根thenpromise

非常感謝任何幫助。 謝謝。

可以通過使用鏈接方法返回對象的函數模擬promises來測試延遲。 在這種情況下嘲笑SomeService.getObjs應與方法返回一個對象then

為了做到這一點,在beforeEach語句中添加另一個:

beforeEach(module(function ($provide) {
  $provide.value('SomeService', {
    getObjs: function () {
      return {
        then: function (callback) {
          // mockedResponseData is passed to callback
          callback(mockedResponseData);
        }
      };
    }
  }));

模擬服務將立即加載現有的promise回調函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM