如何在angularJS中为工厂方法编写单元测试

时间:2017-05-23 15:31:22

标签: angularjs unit-testing karma-jasmine factory

我有一个看起来像这样的工厂方法:

createApp: function(appType, subjectType, appIndicator) {
          if (appType === 'newApp') {
            return Restangular.all('v1/app').post({appType: appType, appIndicator: appIndicator}).then(function(app) {
              $state.go('app.initiate.new', {appId: app.id});
            });
          } else {
            return Restangular.all('v1/app').post({appType: appType, subjectType: subjectType, appIndicator: appIndicator}).then(function(app) {
              $state.go('app.initiate.old', {appId: app.id});
            });
          }
        }

我想为它编写单元测试...但我不确定在哪里可以开始测试它。我只是真的为工厂方法编写了单元测试,这些方法比这简单得多(比如简单的数学函数)

我使用karma + jasmine进行测试,到目前为止,我写了一些失败的东西。

it('should return a new application', function(done) {
      application.createApp().then(function(app) {
        expect(app.appType).toEqual("newApp");
        done();
      });
    });

关于如何测试这样的东西的任何提示?

1 个答案:

答案 0 :(得分:0)

What you have done is wrong. You will have to mock the factory call.

spyOn(application,'createApp').and.callFake(function() {
    return {
      then : function(success) {
             success({id: "abc"});
         }
    }
});

it('should return a new application', function(done) {
      spyOn($state, 'go');
      application.createApp();
      expect($state.go).toHaveBeenCalled();
    });