为什么添加的模拟模块不在嵌套的 beforeEach 中执行

Why added mock module is not executed in nested beforeEach

我有以下规格:

describe("parent describe", function(){

  beforeEach(function(){
    loginPage.go();
  });

  describe("nested describe", function(){

    beforeEach(function(){
      browser.addMockModule("httpMocker", function() {
        console.log("going there ?"); //not executed in the browser, WHY ?
        angular.module("httpMocker", ["ngMockE2E"]).run( function($httpBackend) {
          $httpBackend.whenGET(/security/).respond( function() { return [401]; });

        $httpBackend.whenGET(/.*/).passThrough();
      });
    });

    it("a spec", function(){
      //....
    })
  });
});

正如评论中提到的那样,提供给 addMockModule 的函数永远不会在浏览器中执行。

现在,如果我将 addMockModule 调用移动到父 describebeforeEach 中,模拟模块将被添加并执行。

为什么?

问题与beforeEach()处无关。 addMockModule 必须在任何 browser.get() 调用之前调用:

Add a module to load before Angular whenever Protractor.get is called. Modules will be registered after existing modules already on the page, so any module registered here will override preexisting modules with the same name.

在你的情况下,我很确定 loginPage.go(); 使用 browser.get()