Jest typescript request-progress pipe failed to flush

In my Jest test, I incorporate the functionality from request-progress.

var fs = require('fs');
var request = require('request');
var progress = require('request-progress');

async function downloader() {
  return new Promise((resolve, reject) => { 
    progress(request('https://az412801.vo.msecnd.net/vhd/VMBuild_20141027/VirtualBox  /IE11/Windows/IE11.Win8.1.For.Windows.VirtualBox.zip'), {
    // throttle: 2000,                    // Throttle the progress event to 2000ms, defaults to 1000ms
    // delay: 1000,                       // Only start to emit after 1000ms delay, defaults to 0ms
    // lengthHeader: 'x-transfer-length'  // Length header to use, defaults to content-length
    })
    .on('progress', function (state) {
        console.log('progress', state);
    })
    .on('error', function (err) { 
        // Handle error
    })
    .on('end', function () {
        // Do something after request finishes
    })
    .pipe(fs.createWriteStream('IE11.Win8.1.For.Windows.VirtualBox.zip'));
  });
}

After testing, it seems that there is a flush issue with the pipe not being properly flushed at the end of the transfer. This results in the downloaded file being slightly smaller than the correct filesize. A workaround I found was running additional functions after the download, which seemed to fix the size discrepancy.

I am exploring options to force a flush on the filestream within the 'end' event or consider other methods to address this issue. Adding a wait is one option, but it feels like a hacky solution that I'm not too fond of. Placing the resolve inside the 'end' event doesn't trigger the final flush, while excluding the resolve causes the function to never return. I'm curious if it's possible to implement a flush on the pipe itself.

Answer №1

Exploring the Jest/Node framework has been a fresh experience for me. After some trial and error, I discovered that

.pipe(fs.createWriteStream(fname).on('finish', () => {resolve();}));

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Guide on deploying a web application using Socket.io and SvelteKit on Vercel

Currently, I'm developing a multiplayer .io-style game that utilizes both Socket.io and SvelteKit. While testing the project on a local development server, everything runs smoothly. However, upon deploying to Vercel, an error message stating Failed to ...

Resolving a Type Error in NextAuth JWT Callback with Facebook OAuth and Next.js (Using TypeScript)

Currently, I am integrating Facebook authentication into my project and attempting to retrieve the access token in order to make API calls. This task is being completed in a Next.js TypeScript environment using NextAuth. pages/api/auth/[...nextAuth].ts: . ...

Issues encountered when trying to manipulate the Angular dom

Currently, I have an array of check boxes set up in the following manner: <div *ngFor="let order of orders; let i = index"> <input type="checkbox" id="{{orders[i].name}}_i">{{orders[i].name}} </div> Let's say the check boxes ...

Inquiry regarding the return value of 'async-lock' in nodejs

I am utilizing the async-lock module in my typescript project to handle concurrency. However, I am encountering difficulties with returning the result within lock.acquire(...) {...}. Any guidance on how to resolve this issue would be greatly appreciated. ...

(Angular) Best methods to search for a specific string in an array

Looking to retrieve a string value from an HTML input inside an array in Angular 5 using a service file within a component. My code login.component.ts export class LoginComponent implements OnInit { userData = []; constructor(private router: Route ...

Svelte: highlighting input text when selected

Is there a way to select the text of an input element when it is focused using bind:this={ref} and then ref.select()? It seems to only work when I remove the bind:value from the input element. Why is that the case, and how can I solve this issue? Thank yo ...

Top method for declaring and setting up variables in Angular 2

I've been diving into the Angular Style Guide, but a question has come up: what is the most effective method for initializing a variable in a component? For instance, should I declare a variable like so: export class MyComponent implements OnInit { ...

What is the correct location for storing .html, .css, and other files in a project involving Typescript, Angular 2, and ASP.Net Core 1.0?

When following a Typescript tutorial to create an ASP.Net Core application (with or without Angular 2), it is recommended to set up a folder called Scripts and use gulp tasks to selectively copy only the .js files to the wwwroot folder during the build pro ...

Challenges with date formatting arise for Spanish speakers when the date returns as NaN or an Invalid

I have been working on an Angular app Objective: My aim is to allow users to input dates in Spanish format (DD/MM/YYYY) and display them as such, while converting them back to English format when saving the data to the Database. Issue: One problem I enco ...

Using Angular Material's MatChipList with a Dynamic FormArray: Step-by-step Guide

StackBlitz My FormArray (variants) is structured like this: this.productGroup = this.fb.group({ name: '', variants: this.fb.array([ this.fb.group({ type: '', options: '' }) ]) }) In m ...

When a variable is declared as keyof T and utilized as a dynamic property, it automatically inferred as a string-index type

I have developed a detailed use-case and created an MCVE to showcase it: function createSeedMap<T extends (...args:any)=>any>(seedKey:keyof T, seedValue:string):void { // ... const seedMap:Record<keyof T, string> = { [seedKe ...

There is no matching overload for this call in Angular. Error code: TS2769

Having trouble identifying the issue in this TypeScript code snippet. Error reported on line 5, ".subscribe((response: { Token: string }) => {". login() { this.httpClient .post('http://localhost:4000/signin', this.loginForm.value) ...

Creating an interactive element in Angular: A step-by-step guide

Hey there, I'm facing a problem with creating a specific payload structure as shown in the example code snippet below. Everything was going well until I got stuck at the dynamic form part, and despite several attempts, I can't seem to figure it o ...

Encountering an issue with managing promises in Observables for Angular HTTP Interceptor

Currently, I am encountering the following situation: I have developed an authentication service using Angular/Fire with Firebase authentication. The authentication service is expected to return the ID token through the idToken observable from Angular/Fir ...

Is it possible for Visual Studio 2013 to compile TypeScript files even without node.js installed?

My current setup involves using TypeScript in combination with Visual Studio Code and the tsc CLI with node.js installed. I recently made an interesting discovery about tsc - I always assumed it was a javascript program, but then I started to wonder how ...

Utilizing classes as types in TypeScript

Why is it possible to use a class as a type in TypeScript, like word: Word in the provided code snippet? class Dict { private words: Words = {}; // I am curious about this specific line add(word: Word) { if (!this.words[word.term]) { this.wor ...

TypeScript's Named Type Association

In my project, I have implemented a system that connects names to specific types through a Mapping Object Type called TMap The purpose of this system is to provide a handler function with information about one of the named types along with its correspondi ...

Deciphering the inner workings of React's DOM updates and mastering its application

I have a project where I need to implement functionality with 3 buttons, but only 2 are relevant to my current issue. One button is meant to add elements to the user's website view, while the other should remove elements. Although I am new to React, ...

An empty constant object can trigger an endless cycle of re-rendering

Consider this simplified scenario: export function myCustomHook<TData = Record<string,string>> (data?: TData) { const [output, setOutput] = useState<number>(); const customFunction(data?: TData) { //In a real scenario : p ...

Creating a type for React onSubmit event using Typescript

I am encountering difficulties with creating an onSubmit function and assigning it a type. Regardless of what I try to assign on the first line where the function type is typically set, I consistently receive an error message, even when using 'any&ap ...