2016-12-16 4 views
0

Я использую Protractor для того, чтобы получить некоторые сквозные тесты в моем приложении. В тесте я издеваться бэкенд-звонки с MockModule следующим образом:Перехват транспортира «beforeAll» http mock

describe('Lets test a feature' , function(){ 
    beforeAll(function() { 
     var customerE2E = function() { 
      angular.module('customerE2E', ['customer', 'ngMockE2E']) 
       .run(function ($httpBackend) { 

        $httpBackend.whenPOST('/api/data').respond(200); 
        $httpBackend.whenGET(/^.*/).passThrough(); 
      }); 
     }; 
     browser.addMockModule('customerE2E', customerE2E); 
    }); 

    it('correctly demonstrates my problem', function() { 
     expect(element(by.css('h4')).getText()).toMatch('Hello world'); 
    }  
}) 

Это работает очень хорошо, но моя проблема в том, что я хочу, чтобы проверить мое заявление, когда пост реагирует с 404, 500 и т.д. Я решил это, получив новую «описать» -функцию для каждого случая, но было бы неплохо просто переопределить этот вызов из «it» -функций.

it('correctly demonstrates my problem', function() { 
    expect(element(by.css('h4')).getText()).toMatch('Hello world'); 
} 

it('show error due to bad request', function() { 
    /* 
    Replace $httpBackend.whenPOST('/api/data').respond(200); 
    with $httpBackend.whenPOST('/api/data').respond(404); 
    */ 
    expect(element(by.css('h4')).getText()).toMatch('Failed api call'); 
} 

Я действительно новичок в этом, так что я интересно, если есть хороший способ достичь простой способ, чтобы переопределить ранее MockModuled, который был установлен в beforeAll-функции.

ответ

2

Для достижения этой цели вы можете использовать beforeEach().

describe('Test Mock Module',function() { 

    var statusCodes = [200,404,500]; 
    var currentTestNumber = 0; 
    beforeAll(function() { 
     var customerE2E = function() { 
      angular.module('customerE2E', ['customer', 'ngMockE2E']) 
       .run(function ($httpBackend) { 

        $httpBackend.whenPOST('/api/data').respond(200); 
        $httpBackend.whenGET(/^.*/).passThrough(); 
       }); 
     }; 
     browser.addMockModule('customerE2E', customerE2E); 
    }); 

    /*Below method will be executed before each test and set the required response respectively*/ 
    beforeEach(function() { 
     $httpBackend.whenPOST('/api/data').respond(statusCodes[currentTestNumber++]); 
    }); 

    it('test 200 status code',function() { 
     expect(element(by.css('h4')).getText()).toMatch('Message for 200 status code'); 
    }); 

    it('test 404 status code',function() { 
     expect(element(by.css('h4')).getText()).toMatch('Message for 404 status code'); 
    }); 

    it('test 500 status code',function() { 
     expect(element(by.css('h4')).getText()).toMatch('Message for 500 status code'); 
    }); 
}); 
+0

Вы даже пробовали это? Я не могу ни доходить до $ httpBakend с beforeEeach, так как он используется в модуле. Это можно решить, создав новый customerE2E в beforeEech, но это кажется уродливым, и я также не могу достичь переменных statusCodes и CurrentTestNumber – willedanielsson