【问题标题】:Protractor: HTTP Response Testing量角器:HTTP 响应测试
【发布时间】:2017-05-18 23:27:51
【问题描述】:

我正在使用 Protracotr 进行 e2e 测试。

我想在量角器中测试来自 HTTP 的响应。 基本上:

  1. 我正在运行一些 NodeJS 服务器。
  2. 我想向这个服务器发送请求
  3. 接收一些 JSON 数据
  4. 解析这些数据
  5. 检查它们是否正确

我正在使用“http”NODEJS Lib 进行 http 调用 GET+POST。

var http = require('http');

describe("Some test", function() {

    function httpGet(siteUrl) {
        http.get(siteUrl, function(response) {

            response.setEncoding('utf8');
            response.on("data", function(chunk) {
                bodyString += chunk;
            });

            response.on('end', function() {
                defer.fulfill({
                    bodyString: bodyString
                });
            });

        }).on('error', function(e) {
            defer.reject("Got http.get error: " + e.message);
        });

        return defer.promise;
    }

    it('Test case', function(){
        httpGet("http://localhost:3333/path/1/10").then(function(result) {
            var json_data = JSON.parse(result.bodyString);

            for (var i = 0; i < json_data.length; ++i) {
                console.log("label: " + json_data[i].label);
                expect(json_data[i].label).toEqual('abc');
            }
        });
    });
});

我可以在 console.log 中看到很好解析的响应消息,但我无法测试任何东西,我的测试结果是

Finished in 0.019 seconds
1 test, 0 assertions, 0 failures

label: Text1
label: Text2

[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 passed

Process finished with exit code 0

测试完成后控制台日志被记录下来,并且没有进行任何断言。

请帮助,如何在 Protractor 中测试来自服务器的响应(JSON 格式)?

【问题讨论】:

    标签: json node.js protractor httprequest httpresponse


    【解决方案1】:

    对于异步测试,您需要将完成的回调传递给您的函数。然后调用done() 成功或done.fail() 失败。请参阅Jasmine's Asynchronous support 文档。

    it('Test case', function(done){
        httpGet("http://localhost:3333/path/1/10").then((result) => {
            var json_data = JSON.parse(result.bodyString);
    
            for (var i = 0; i < json_data.length; ++i) {
                console.log("label: " + json_data[i].label);
            }
            done();
        }).catch(err => {
            done.fail();
        });
    });
    

    【讨论】:

    • 另外,我对您的原始问题进行了一些更改(正在审核中)。您最初的问题是关于量角器的;但是,我相信您正在寻找 Jasmine 作为测试框架。
    • 感谢您的评论!我正在尝试调用 done() 但这不起作用,我收到“ReferenceError: done is not defined”错误。还有:'TypeError: httpGet(...).then(...).catch 不是函数'
    • 是的。好点......这是因为回调。你应该使用粗箭头。让我更新我的答案。
    • 嗯,我不确定我们是否都在谈论相同的技术。我收到“SyntaxError: Unexpected token =>”。我正在使用量角器通过 Web 驱动程序测试 Angular 网页。我正在使用 JavaScript
    • 我在我的问题(关于 e2e 测试的量角器)以及我得到的测试结果中添加了更多信息。
    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多