2016-01-22 65 views
1

执行我有以下规格:为什么加入模拟模块没有嵌套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中,则模拟模块将被添加并执行。

为什么?

回答

3

该问题与beforeEach()地点无关。该addMockModule有任何browser.get()调用之前调用:

添加一个模块,每当Protractor.get被称为前角加载。模块将在 页面上的现有模块之后进行注册,因此在此注册的任何模块将覆盖已存在的具有相同名称的 模块。

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