如何在量角器测试中检查应用程序的URL的状态代码?

时间:2017-12-07 14:58:04

标签: javascript jquery angular jasmine protractor

我正在使用请求包来请求网址并使用延期承诺:

getMonitoredPageName = function () {
    var deferredExecutor = protractor.promise.defer();
    var defer = protractor.promise.defer();

    request('http://google.com',
    function (error, response, body) {
        if (error || response.statusCode ==400) {
            defer.reject(response.statusCode);
        } else {
            defer.fulfill(response.statusCode);
        }
    });

    return defer.promise;        
}

我在test上面调用了函数:

  it('should log the page name of every page view in the wizard', function () {

    // We opened the first page of the wizard and we expect it to have been logged
    expect(heartBeatNotification.getMonitoredPageName()).toBeTruthy(true);
    //expect(heartBeatNotification.getMonitoredPageName()).toBe(400);
    //browser.controlFlow().execute(heartBeatNotification.getMonitoredPageName);

})

问题是测试用例总是成功,无论url给出了什么。需要编写测试用例来检查应用程序是否正在运行。

2 个答案:

答案 0 :(得分:1)

任何非零状态代码都将是" truthy"所以你需要调整你的测试用例。让它检查响应是否明确200,或者甚至只是检查它的任何2xx,因为它仍然成功。

expect(heartBeatNotification.getMonitoredPageName()).toEqual(200);

或者只是检查它是否大于200或小于300等。

expect(heartBeatNotification.getMonitoredPageName()).toBeGreaterThanOrEqual(200);
expect(heartBeatNotification.getMonitoredPageName()).toBeLessThan(300);

另外,请注意,您可能需要查看第一个if块上的逻辑。

    if (error || response.statusCode ==400) {
        defer.reject(response.statusCode);
    }

如果出现错误,可能没有response.statusCode(非正面)。可能更好地拒绝错误本身

答案 1 :(得分:1)

我能够以这种方式进行测试。它比你想要做的事情略微简化,但它应该可以帮助你搞清楚。有一点需要注意,if块设置的方式有问题。如果responseundefined,则测试将超时,并且承诺永远不会返回。无论如何,这是我能够让你的测试工作的方式。

it('should return status code 200', async () => {
    const url = 'http://google.com';
    await heartBeatNotification.getMonitoredPageName(url).then(statusCode => {
        expect(statusCode).toEqual(200);
    }, () => {
        fail('app not started');            
    });
});

这是功能:

getMonitoredPageName = (url) => {
    const defer = protractor.promise.defer();

    request(url, (err, response, body) => {            
        if(err) {
            defer.reject();
        } else {
            defer.fulfill(response.statusCode);
        }
    });

    return defer.promise;
}