簡體   English   中英

模擬服務注入Angular模塊運行塊

[英]Mock service injected into Angular module run block

在我的module.run塊中,它正在調用我所做的服務上的方法。 在運行我的測試時,我希望它引用模擬服務而不是正在發出http請求的模擬服務。 我目前正在嘗試測試一個控制器,而不是實際的運行塊本身 - 如何將模擬服務注入到run函數中? 我已經嘗試使用$ provide.factory但它似乎沒有做任何事情,仍然正常加載服務。

我正在使用Jasmine來編寫我的測試。

app.js

angular.module("app")
    .run(function(MyService) {
        MyService.log("starting app");
    });

test.js

describe("MyController", function() {

    beforeEach(function() {
        module(function ($provide) {
            $provide.factory("MyService", { log: function(){} });
        });
    });

    // I want module 'app' to execute its run function using injected value for MyService
    beforeEach(module("app"));

    beforeEach(inject(function($controller, $rootScope) {
        MyController = $controller("MyController", { $scope: $rootScope.$new() });
    }));

    ...........

});

在這種情況下是重要的順序。

您需要先加載您的應用

beforeEach(module("app"));

然后覆蓋MyService定義。

beforeEach(
  module({
    "MyService": {
      log: function(message) {
        console.log("MyFakeService called: " + message);
      }
    }
  })
);

否則,最后會注冊並使用應用服務實施。

工作示例在這里 - 查看控制台http://plnkr.co/edit/BYQpbY?p=preview

暫無
暫無

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

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