量角器覆盖" beforeAll" http模拟

时间:2016-12-16 13:01:46

标签: angularjs testing jasmine protractor integration-testing

我正在使用Protractor在我的应用程序中进行一些端到端测试。在测试中,我使用MockModule模拟后端调用如下:

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等响应时我已经解决了这个问题,我为每个人提供了一个新的"描述" -function只是能够从"它" -functions中覆盖这个调用会很好。

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');
} 

我真的很陌生,所以我想知道是否有一种很好的方法可以轻松覆盖在beforeAll-function中设置的早期MockModuled。

1 个答案:

答案 0 :(得分: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');
    });
});