2015-10-06 34 views
0

在對Angular Controller進行Jasmine測試時,我發現這兩種方法之間存在差異。不應該有,但有。這就是說,使用調試,我發現在這兩種情況下,正確的模擬項目都會通過,但測試的行爲有所不同。爲什麼這些方法在測試控制器時有所不同

首先:我們在這裏模擬服務項目,然後在創建時使用DI注入到控制器中。

$provide.value('core.data.CompanyService', companyService); 
$provide.value('core.list.ListGenerator', listGeneratorFactory); 
$provide.value('core.actions.ActionContext', actionContext); 

ActivitiesCtrl = $controller('activities.ActivitiesCtrl', { 
    $scope: scope 
}); 

二: 這裏我們明確指定控制器創建注入的服務項目:

ActivitiesCtrl = $controller('activities.ActivitiesCtrl', { 
    $scope: scope, 
    'core.lists.ListGenerator': listGeneratorFactory, 
    'core.actions.ActionContext': actionContext, 
    'core.data.CompanyService': companyService 
}); 
+0

定義如何他們的行爲不同的 – Phil

+0

重複,但沒有答案:1)[Angular.js測試控制器:指定依賴通過$提供vs $控制器](http://stackoverflow.com/questions/30776642/angular-js-testing-controllers-specifying-依賴關係 - 通過提供vs控制)2)[AngularJS茉莉服務模擬](http://stackoverflow.com/questions/30510463/angularjs-jasmine-service-mock) –

+0

@Phil我已經重組的應用程序,和使用第一種方法使測試失敗,但第二種方法使測試通過。然而在理論上都是這樣做的。 –

回答

0

如果你的代碼的第一個片段其實是你有什麼的話,我想我看到的問題;提供商應設置在模塊配置部分和$controller應在inject回調內訪問。

鑑於嘲笑的正確設置在此之前,下面是等價的

  1. 提供商在$injector

    beforeEach(function() { 
        module('your.controller.module', function($provide) { 
         $provide.value('core.list.ListGenerator', listGeneratorFactory); 
         $provide.value('core.actions.ActionContext', actionContext); 
         $provide.value('core.data.CompanyService', companyService); 
        }); 
    
        inject(function($controller) { 
         // assuming scope is defined somewhere 
         ActivitiesCtrl = $controller('activities.ActivitiesCtrl', { 
          $scope: scope 
         }); 
        }); 
    }); 
    
  2. 控制器當地人

    beforeEach(inject($controller) { 
        // again, assuming scope is defined somewhere 
    
        ActivitiesCtrl = $controller('activities.ActivitiesCtrl', { 
         $scope: scope, 
         'core.lists.ListGenerator': listGeneratorFactory, 
         'core.actions.ActionContext': actionContext, 
         'core.data.CompanyService': companyService 
        });    
    })); 
    
相關問題