[英]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.