簡體   English   中英

如何在Angular中模擬模塊

[英]How to mock a module in angular

因此,到目前為止,我已經閱讀了許多帖子,但沒有建議。

我想模擬一個模塊-說出angular-foo。 原始文件將與其他所有文件一起加載。

angular.module('app', ['angular-foo'...

我想在我的業力/摩卡測試中模擬這個模塊。 我已經嘗試過像這樣稱呼它的建議,但這是不行的。

beforeEach(module('app'));

beforeEach(module('angular-foo'))

如何完全阻止原始的angular-foo運行(但必須將其作為其余代碼的一部分加載)?

要模擬factoryservicevalue服務,可以使用angular.mock.module對象參數

beforeEach(module('app', 'angular-foo', {
  fooFactoryService: ...,
  fooValueService: ...
}));

為了模擬可在配置階段注入的服務( constantprovider ),應使用配置功能

beforeEach(module('app', 'angular-foo', ($provide) => {
  $provide.constant('fooConstantService', ...),
  $provide.provider('fooProviderService', ...),
}));

該行中的最后一個模塊將覆蓋其他模塊的服務。 可以部分模擬服務(使用$provide.decorator )或完全$provide.decorator

如果沒有加載angular-foo模塊,但其他模塊使用了它,則可以在規范中使用其模擬版本完全重新定義它

angular.module('angular-foo', [])...
beforeEach(module('app', 'angular-foo'));

對我來說,竅門是將提供程序放在模塊聲明之前:

  beforeEach(module(function($provide) {
    $provide.provider('myProvider', function() {
      return {
        myProviderFunction: function() {},

        $get: function () {
          return {
            myProviderFunction: function() {}
          };
        }
      };
    });
  }));

  beforeEach(module('myApp'));

暫無
暫無

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

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