【问题标题】:Make real async requests for jasmine integration testing为 jasmine 集成测试发出真正的异步请求
【发布时间】:2014-09-03 16:01:21
【问题描述】:

我有一个带有一些茉莉花测试的 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();

});

但是当我运行时,我得到了错误

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)

我不确定如何使用模拟,或者我什至知道我正在这样做。我想要做的就是能够运行一套测试,对我的后端进行实际调用,以确认事情正在正确集成......你知道......集成测试。

有人有什么建议吗?

【问题讨论】:

    标签: javascript angularjs service jasmine integration-testing


    【解决方案1】:

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

    它就像 Jasmine 中的单元测试一样工作。

    我在 Jasmine 2.0 中使用它,所以测试如下:

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

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

    【讨论】:

      【解决方案2】:

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

      https://github.com/angular/protractor

      https://docs.angularjs.org/guide/e2e-testing

      【讨论】:

      猜你喜欢
      • 2020-08-03
      • 1970-01-01
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      相关资源
      最近更新 更多