簡體   English   中英

無效的Chai屬性:nock上的setEncoding

[英]Invalid Chai property: setEncoding on nock

我正在使用nock 9.1.6來模擬帶chai 3.5.0 nylas API。 它與代碼完美配合:

it('fails when no state is given and provider fails', () => {
  const user = fixture.elements.user1;
  const connector = new NylasConnector('nylas', 'connect', user);

  nock(NYLAS_API)
        .post(`/a/${DN_NYLAS_APP_ID}/accounts/${user.nylas.account_id}/downgrade`)
        .reply(500, (uri, body) => expect(body).to.eql(''));

  sinon.stub(Nylas, 'urlForAuthentication').callsFake(params => {
    expect(params).to.eql({
      redirectURI: `${DN_AUTH_SERVICE_URL}/oauth2/nylas/callback`,
      trial: false,
      state: JSON.stringify({})
    });
    return chance.url() + '?' + objectToQuery(params);
  });

  return expect(connector.getAuthenticationUrl()).to.be.rejectedWith(ProviderError)
    .then(() => User.findById(user._id))
    .then(user => {
       expect(user.nylas).not.null;
       expect(user.nylasToken).not.null;
       expect(user.nylasCursor).not.null;
     });
  })

我嘗試將nock升級到10.0.6,將chai升級到4.2.0,現在出現以下錯誤:

"Error: Invalid Chai property: setEncoding",
    "    at Object.proxyGetter [as get] (/home/jeremy/datananas/datananas/packages/api/node_modules/chai/lib/chai/utils/proxify.js:78:17)",
    "    at Object.isStream (/home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/common.js:382:24)",
    "    at continueWithResponseBody (/home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/request_overrider.js:435:20)",
    "    at end (/home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/request_overrider.js:385:12)",
    "    at /home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/request_overrider.js:160:9",
    "    at OverriddenClientRequest.RequestOverrider.req.write (/home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/request_overrider.js:139:9)",
    "    at OverriddenClientRequest.RequestOverrider.req.end (/home/jeremy/datananas/datananas/packages/api/node_modules/nock/lib/request_overrider.js:156:11)",
    "    at Request.end (/home/jeremy/datananas/datananas/packages/api/node_modules/request/request.js:1514:14)",
    "    at end (/home/jeremy/datananas/datananas/packages/api/node_modules/request/request.js:564:14)",
    "    at Immediate.<anonymous> (/home/jeremy/datananas/datananas/packages/api/node_modules/request/request.js:578:7)",
    "    at runCallback (timers.js:705:18)",
    "    at tryOnImmediate (timers.js:676:5)",
    "    at processImmediate (timers.js:658:5)"

該錯誤出現在connector.getAuthenticationUrl() ,因為該函數調用了模擬函數。 在此函數中,它們是對nylasRequest的調用,並且在到達帶有new Promise()的行時出現錯誤:

function nylasRequest(uri, token, body) {
  const params = {
    uri: `https://api.nylas.com${uri}`,
    method: 'POST',
    json: body
  };

  if (token)
    params.auth = { user: token };

  console.log('This line appears. All params are valid.')
  return new Promise((resolve, reject) => request(params, (error, res, body) =>  {
    console.log('This line never shows up');
    // some code
  }));
}

我使用request 2.88.0 ,但沒有更改我使用的版本。

我假設您的問題在於此行:

.reply(500, (uri, body) => expect(body).to.eql(''))

Nock將使用該函數返回的值作為偽響應的主體。 當函數試圖確定響應主體是否可流式傳輸時,從該函數返回chai期望似乎會使nock感到困惑。

我將其更改為以下內容:

nock(NYLAS_API)
  .post(`/a/${DN_NYLAS_APP_ID}/accounts/${user.nylas.account_id}/downgrade`)
  .reply(500, (uri, body) => {
    expect(body).to.eql('')
    return ''
  });

暫無
暫無

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

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