Jasmine AJAX模拟将字符串转换为数组

时间:2015-07-22 14:41:42

标签: ajax unit-testing jasmine karma-jasmine when-js

我正在尝试围绕我的AjaxRequest类编写测试套件,但是当我试图检查请求体时,我得到了这个测试失败

FAILED TESTS:
AjaxRequest
  #POST
  ✖ attaches the body to the response
    PhantomJS 1.9.8 (Mac OS X 0.0.0)
  Expected Object({ example: [ 'text' ] }) to equal Object({ example: 'text' }).

以下是单元测试的相关部分:

      req = new AjaxRequest().post('http://example.com')
            .body({
                example: 'text'
            }).run();

这是发出ajax请求的run()方法

var options = {
        url: this._url,
        method: this._method,
        type: 'json',
        data: this._body
    };

    return when(reqwest(options));

我正在使用reqwest发出ajax请求。

有人可以指出为什么当请求在json正文中发送['text']时它会期待'text'吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

更改AjaxRequest的实现解决了这个问题。

以下是使用run

XMLHttpRequest的新实施
run () {
    var req = new XMLHttpRequest();

    req.open(this._method, this._url, true);

    req.send(JSON.stringify(this._body));

    return when.promise((resolve, reject) => {
        req.onload = function() {
            if (req.status < 400) {
                var param = req.response;
                try { param = JSON.parse(param) } catch (e) { };
                resolve(param);
            } else {
                reject(new RequestError(req.statusText, req.status));
            }
        };
    });
}

这不仅可以摆脱额外的库,还可以更好地控制何时拒绝请求承诺。