Javascript 为jasmine集成测试发出真正的异步请求

Javascript 为jasmine集成测试发出真正的异步请求,javascript,angularjs,service,jasmine,integration-testing,Javascript,Angularjs,Service,Jasmine,Integration Testing,我有一个带jasmine测试的angular应用程序。我最近添加了一个新方法,在我的一个服务中对弹性搜索进行查询,如下所示 test: function(){ return "Working"; }, executeSearch: function(field, value, size, page_number){ return service.executeRegExSearch(field, value, size, page_num

我有一个带jasmine测试的angular应用程序。我最近添加了一个新方法,在我的一个服务中对弹性搜索进行查询,如下所示

test:
    function(){
        return "Working";
    },

executeSearch:
    function(field, value, size, page_number){
        return service.executeRegExSearch(field, value, size, page_number);
    },

//new method
executeRegExSearch:
    function(field, value, size, page_number){
        //main search body, I know it works because
        //I am getting expected results in the browser
    }
//initialization stuff
var $httpBackend;
var searchAPI;

beforeEach(inject(function($injector){
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
    $httpBackend = $injector.get('$httpBackend');
    searchAPI = $injector.get('searchAPI');
}));

it("is loaded properly", function(){
    expect(searchAPI.test() == "Working").toBe(true);  //passes
});

it("can make a request", function(){
    var field = "col_name";
    var value = "bb.*";  //this is matching in my browser/application
    var size = 10;
    var page_number = 1;

    var res;

    searchAPI.executeSearch(field, value, size, page_number).then(function(res){
        res = res;
        alert(JSON.stringify(res));
        done();
    });
    $httpBackend.flush();

});
然后在我的茉莉花测试中,我得到了这样的东西

test:
    function(){
        return "Working";
    },

executeSearch:
    function(field, value, size, page_number){
        return service.executeRegExSearch(field, value, size, page_number);
    },

//new method
executeRegExSearch:
    function(field, value, size, page_number){
        //main search body, I know it works because
        //I am getting expected results in the browser
    }
//initialization stuff
var $httpBackend;
var searchAPI;

beforeEach(inject(function($injector){
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000;
    $httpBackend = $injector.get('$httpBackend');
    searchAPI = $injector.get('searchAPI');
}));

it("is loaded properly", function(){
    expect(searchAPI.test() == "Working").toBe(true);  //passes
});

it("can make a request", function(){
    var field = "col_name";
    var value = "bb.*";  //this is matching in my browser/application
    var size = 10;
    var page_number = 1;

    var res;

    searchAPI.executeSearch(field, value, size, page_number).then(function(res){
        res = res;
        alert(JSON.stringify(res));
        done();
    });
    $httpBackend.flush();

});
但是当我跑的时候,我得到了错误

Unexpected request: GET http://myserver/index-1/_search?source={"query":{"regexp":{"col_name":{"value":"bb.*"}}}}"&size=10&from=0 No more request expected in http://localhost:8081/js/angularjs/angular-mocks.js (line 1180)
我不知道如何使用mock,甚至不知道我正在这么做。我所要做的就是能够运行一套测试,对我的后端进行实际调用,以确认事情是否正确集成。。。你知道的。。集成测试


有人有什么建议吗?

如果你想对angular应用程序进行端到端e2e测试,你一定要使用量角器(由angular团队创建),你可以使用jasmine创建测试并对应用程序运行它们,如果你只是使用单元测试,我认为最好的方法是模拟httpBackend


我不想用Selenium的东西做测试,所以为了用真正的后端调用测试我的应用程序,我使用了

它的工作原理与Jasmine中的单元测试类似

我将它与Jasmine 2.0一起使用,因此测试如下所示:

it(' myTest', function (done) {
    _myService.apiCall()
        .then(function () {
            expect(true).toBeTruthy();
            done()
        });
});

注意:由于异步调用,需要
done

好的,我想两者都做,所以我将检查这两个链接。谢谢除了在e2e测试中使用量角器外,还可以使用ngMidway tester调用真正的后端表单Jasmine测试。我推荐阅读,尤其是《普朗克》