簡體   English   中英

使用jQuery Promise測試代碼時,Mocha測試錯誤

[英]Mocha test error when testing code with jquery promise

我正在嘗試測試以下代碼。 基本上,服務器拒絕此請求,因為某些參數未按照api規范的要求發送。 Api.createRecordApi.createRecord使用jquery.ajax並在調用時返回jquery promise。

describe("Creating test record with incorrect data", ()=> {
    const params      = {tId:"12323","col":"colValue"};
    it('Should not create new record', (done) => {
        const result = Api.createRecord(params);
        console.log(result);
        expect(result)
            .to.eventually.equal(null)
            .notify(done);
    });
});

當我運行此代碼時,出現以下錯誤。

  Error: done() invoked with non-Error: {"readyState":0,"status":0,"statusText":"SyntaxError"}
      at mightThrow (node_modules/jquery/dist/jquery.js:3583:29)
      at Window.process (node_modules/jquery/dist/jquery.js:3651:12)
      at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:524:19)

我無法找出問題所在。 我的代碼或其他地方是否有問題。

這就是我發送ajax請求的方式。

sendRequest(URL, dataToSend) {
    return $.ajax({
        type        : 'POST',
        url         : URL,
        crossDomain : true,
        data        : JSON.stringify(dataToSend),
        dataType    : 'json'
    }).fail((responseData) => {
        if (responseData.responseCode) {
            console.error(responseData.responseCode);
        }
    });
},

上面的代碼中是否有一些問題可以處理故障而不是拋出故障?

最后,在仔細閱讀了Mocha文檔之后,我找到了解決方案。

在Mocha v3.0.0和更高版本中,返回Promise並調用done()將導致異常,因為通常這是一個錯誤:

const assert = require('assert');

it('should complete this test', function (done) {
  return new Promise(function (resolve) {
    assert.ok(true);
    resolve();
  })
    .then(done);
});

我將測試用例更改為此,並成功了。

expect(result).to.be.rejected;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM