Я столкнулся с аналогичной проблемой с модульными тестами (особенно в шутке, когда модульные тесты запускаются локально для создания моментальных снимков, а затем сервер CI запускает (потенциально) другой часовой пояс, что приводит к сбою сравнения моментальных снимков). Я издевался над нашими Date
и некоторыми вспомогательными методами:
describe('...', () => {
let originalDate;
beforeEach(() => {
originalDate = Date;
Date = jest.fn(
(d) => {
let newD;
if (d) {
newD = (new originalDate(d));
} else {
newD = (new originalDate('2017-05-29T10:00:00z'));
}
newD.toLocaleString = () => {
return (new originalDate(newD.valueOf())).toLocaleString("en-US", {timeZone: "America/New_York"});
};
newD.toLocaleDateString = () => {
return (new originalDate(newD.valueOf())).toLocaleDateString("en-US", {timeZone: "America/New_York"});
};
newD.toLocaleTimeString = () => {
return (new originalDate(newD.valueOf())).toLocaleTimeString("en-US", {timeZone: "America/New_York"});
};
return newD;
}
);
Date.now = () => { return (Date()); };
});
afterEach(() => {
Date = originalDate;
});
});
Отдельный байт (uint8
) не имеет порядка следования байтов, порядок следования байтов является свойством последовательности байтов.
В соответствии со спецификацией, которую вы связали, ChunkSize занимает место для 4 байтов - сначала младший байт (младший порядок). Если ваше значение составляет всего один байт (не больше 255), вы просто записали бы байт со смещением 4, как и раньше. Если бы 4 байта были в порядке с прямым порядком байтов, вы должны записать свой байт со смещением 7.
Однако я бы порекомендовал просто использовать setUint32
:
dataView.setUint32(0, 0x52494646, false); // RIFF
dataView.setUint32(4, 172 , true);
dataView.setUint32(8, 0x57415645, false) // WAVE