模拟可读流



请考虑以下代码:

fetch("/").then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
let res = 0;
return reader.read().then(function processResult(result) {
if (result.done) {
return res;
}
const part = decoder.decode(result.value, { stream: true });

res += part.length;
return reader.read().then(processResult);
});
}).then(res => console.log(res));

现在我想测试一下。我嘲笑fetch返回应该提供一些读者的假response。我希望该读取器返回 2 部分数据(请参阅pieces数组(:

import { stub } from "sinon";
const pieces = [
new Uint8Array([65, 98, 99, 32, 208]), // "Abc " and first byte of "й"
new Uint8Array([185, 209, 139, 209, 141]), // Second byte of "й" and "ыэ"
];
const fetchStub = stub(window, "fetch");
fetchStub.returns(Promise.resolve({
body: {
getReader() {
// What's here?
},
},
}));

有什么东西我可以简单地用getReader写,或者我应该像fetch一样完全模拟它?

手动模拟:

fetchStub = stub(window, "fetch");
fetchStub.returns(Promise.resolve({
body: {
getReader() {
let i = 0;
return {
read() {
return Promise.resolve(
i < pieces.length
? { value: pieces[i++], done: false }
: { value: undefined, done: true }
);
},
};
},
},
}));

相关内容

  • 没有找到相关文章

最新更新