refactor: implement ajax() in tests using native fetch instead of jQuery (#32579)
This commit is contained in:
		
					parent
					
						
							
								7032be660d
							
						
					
				
			
			
				commit
				
					
						9d054755d6
					
				
			
		
					 13 changed files with 116 additions and 160 deletions
				
			
		| 
						 | 
				
			
			@ -36,7 +36,7 @@ describe('webRequest module', () => {
 | 
			
		|||
  let defaultURL: string;
 | 
			
		||||
 | 
			
		||||
  before((done) => {
 | 
			
		||||
    protocol.registerStringProtocol('neworigin', (req, cb) => cb(''));
 | 
			
		||||
    protocol.registerStringProtocol('cors', (req, cb) => cb(''));
 | 
			
		||||
    server.listen(0, '127.0.0.1', () => {
 | 
			
		||||
      const port = (server.address() as AddressInfo).port;
 | 
			
		||||
      defaultURL = `http://127.0.0.1:${port}/`;
 | 
			
		||||
| 
						 | 
				
			
			@ -46,14 +46,14 @@ describe('webRequest module', () => {
 | 
			
		|||
 | 
			
		||||
  after(() => {
 | 
			
		||||
    server.close();
 | 
			
		||||
    protocol.unregisterProtocol('neworigin');
 | 
			
		||||
    protocol.unregisterProtocol('cors');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  let contents: WebContents = null as unknown as WebContents;
 | 
			
		||||
  // NB. sandbox: true is used because it makes navigations much (~8x) faster.
 | 
			
		||||
  before(async () => {
 | 
			
		||||
    contents = (webContents as any).create({ sandbox: true });
 | 
			
		||||
    await contents.loadFile(path.join(fixturesPath, 'pages', 'jquery.html'));
 | 
			
		||||
    await contents.loadFile(path.join(fixturesPath, 'pages', 'fetch.html'));
 | 
			
		||||
  });
 | 
			
		||||
  after(() => (contents as any).destroy());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ describe('webRequest module', () => {
 | 
			
		|||
          cancel: true
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
      await expect(ajax(defaultURL)).to.eventually.be.rejectedWith('404');
 | 
			
		||||
      await expect(ajax(defaultURL)).to.eventually.be.rejected();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can filter URLs', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ describe('webRequest module', () => {
 | 
			
		|||
      });
 | 
			
		||||
      const { data } = await ajax(`${defaultURL}nofilter/test`);
 | 
			
		||||
      expect(data).to.equal('/nofilter/test');
 | 
			
		||||
      await expect(ajax(`${defaultURL}filter/test`)).to.eventually.be.rejectedWith('404');
 | 
			
		||||
      await expect(ajax(`${defaultURL}filter/test`)).to.eventually.be.rejected();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('receives details object', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -117,9 +117,9 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({ cancel: true });
 | 
			
		||||
      });
 | 
			
		||||
      await expect(ajax(defaultURL, {
 | 
			
		||||
        type: 'POST',
 | 
			
		||||
        data: postData
 | 
			
		||||
      })).to.eventually.be.rejectedWith('404');
 | 
			
		||||
        method: 'POST',
 | 
			
		||||
        body: qs.stringify(postData)
 | 
			
		||||
      })).to.eventually.be.rejected();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can redirect the request', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        protocol: 'file',
 | 
			
		||||
        slashes: true
 | 
			
		||||
      });
 | 
			
		||||
      await expect(ajax(fileURL)).to.eventually.be.rejectedWith('404');
 | 
			
		||||
      await expect(ajax(fileURL)).to.eventually.be.rejected();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -182,12 +182,12 @@ describe('webRequest module', () => {
 | 
			
		|||
    });
 | 
			
		||||
 | 
			
		||||
    it('can change the request headers on a custom protocol redirect', async () => {
 | 
			
		||||
      protocol.registerStringProtocol('custom-scheme', (req, callback) => {
 | 
			
		||||
        if (req.url === 'custom-scheme://fake-host/redirect') {
 | 
			
		||||
      protocol.registerStringProtocol('no-cors', (req, callback) => {
 | 
			
		||||
        if (req.url === 'no-cors://fake-host/redirect') {
 | 
			
		||||
          callback({
 | 
			
		||||
            statusCode: 302,
 | 
			
		||||
            headers: {
 | 
			
		||||
              Location: 'custom-scheme://fake-host'
 | 
			
		||||
              Location: 'no-cors://fake-host'
 | 
			
		||||
            }
 | 
			
		||||
          });
 | 
			
		||||
        } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +202,7 @@ describe('webRequest module', () => {
 | 
			
		|||
      // Note that we need to do navigation every time after a protocol is
 | 
			
		||||
      // registered or unregistered, otherwise the new protocol won't be
 | 
			
		||||
      // recognized by current page when NetworkService is used.
 | 
			
		||||
      await contents.loadFile(path.join(__dirname, 'fixtures', 'pages', 'jquery.html'));
 | 
			
		||||
      await contents.loadFile(path.join(__dirname, 'fixtures', 'pages', 'fetch.html'));
 | 
			
		||||
 | 
			
		||||
      try {
 | 
			
		||||
        ses.webRequest.onBeforeSendHeaders((details, callback) => {
 | 
			
		||||
| 
						 | 
				
			
			@ -210,10 +210,10 @@ describe('webRequest module', () => {
 | 
			
		|||
          requestHeaders.Accept = '*/*;test/header';
 | 
			
		||||
          callback({ requestHeaders: requestHeaders });
 | 
			
		||||
        });
 | 
			
		||||
        const { data } = await ajax('custom-scheme://fake-host/redirect');
 | 
			
		||||
        const { data } = await ajax('no-cors://fake-host/redirect');
 | 
			
		||||
        expect(data).to.equal('header-received');
 | 
			
		||||
      } finally {
 | 
			
		||||
        protocol.unregisterProtocol('custom-scheme');
 | 
			
		||||
        protocol.unregisterProtocol('no-cors');
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -233,7 +233,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        called = true;
 | 
			
		||||
        callback({ requestHeaders: details.requestHeaders });
 | 
			
		||||
      });
 | 
			
		||||
      await ajax('neworigin://host');
 | 
			
		||||
      await ajax('cors://host');
 | 
			
		||||
      expect(called).to.be.true();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -320,7 +320,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({ responseHeaders: responseHeaders });
 | 
			
		||||
      });
 | 
			
		||||
      const { headers } = await ajax(defaultURL);
 | 
			
		||||
      expect(headers).to.match(/^custom: Changed$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Changed');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can change response origin', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -330,7 +330,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({ responseHeaders: responseHeaders });
 | 
			
		||||
      });
 | 
			
		||||
      const { headers } = await ajax(defaultURL);
 | 
			
		||||
      expect(headers).to.match(/^access-control-allow-origin: http:\/\/new-origin$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('access-control-allow-origin', 'http://new-origin');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can change headers of CORS responses', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -339,8 +339,8 @@ describe('webRequest module', () => {
 | 
			
		|||
        responseHeaders.Custom = ['Changed'] as any;
 | 
			
		||||
        callback({ responseHeaders: responseHeaders });
 | 
			
		||||
      });
 | 
			
		||||
      const { headers } = await ajax('neworigin://host');
 | 
			
		||||
      expect(headers).to.match(/^custom: Changed$/m);
 | 
			
		||||
      const { headers } = await ajax('cors://host');
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Changed');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('does not change header by default', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -348,7 +348,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({});
 | 
			
		||||
      });
 | 
			
		||||
      const { data, headers } = await ajax(defaultURL);
 | 
			
		||||
      expect(headers).to.match(/^custom: Header$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Header');
 | 
			
		||||
      expect(data).to.equal('/');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -358,7 +358,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({});
 | 
			
		||||
      });
 | 
			
		||||
      const { data, headers } = await ajax(defaultURL + 'contentDisposition');
 | 
			
		||||
      expect(headers).to.match(/^content-disposition: attachment; filename=aa%E4%B8%ADaa.txt$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('content-disposition', 'attachment; filename=aa%E4%B8%ADaa.txt');
 | 
			
		||||
      expect(data).to.equal('/contentDisposition');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -368,7 +368,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        callback({ responseHeaders: responseHeaders });
 | 
			
		||||
      });
 | 
			
		||||
      const { headers } = await ajax(defaultURL + 'serverRedirect');
 | 
			
		||||
      expect(headers).to.match(/^custom: Header$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Header');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can change the header status', async () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -379,19 +379,8 @@ describe('webRequest module', () => {
 | 
			
		|||
          statusLine: 'HTTP/1.1 404 Not Found'
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
      const { headers } = await contents.executeJavaScript(`new Promise((resolve, reject) => {
 | 
			
		||||
        const options = {
 | 
			
		||||
          ...${JSON.stringify({ url: defaultURL })},
 | 
			
		||||
          success: (data, status, request) => {
 | 
			
		||||
            reject(new Error('expected failure'))
 | 
			
		||||
          },
 | 
			
		||||
          error: (xhr) => {
 | 
			
		||||
            resolve({ headers: xhr.getAllResponseHeaders() })
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        $.ajax(options)
 | 
			
		||||
      })`);
 | 
			
		||||
      expect(headers).to.match(/^custom: Header$/m);
 | 
			
		||||
      const { headers } = await ajax(defaultURL);
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Header');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +397,7 @@ describe('webRequest module', () => {
 | 
			
		|||
        expect(details.responseHeaders!.Custom).to.deep.equal(['Header']);
 | 
			
		||||
      });
 | 
			
		||||
      const { data, headers } = await ajax(defaultURL);
 | 
			
		||||
      expect(headers).to.match(/^custom: Header$/m);
 | 
			
		||||
      expect(headers).to.to.have.property('custom', 'Header');
 | 
			
		||||
      expect(data).to.equal('/');
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
| 
						 | 
				
			
			@ -468,7 +457,7 @@ describe('webRequest module', () => {
 | 
			
		|||
      ses.webRequest.onErrorOccurred((details) => {
 | 
			
		||||
        expect(details.error).to.equal('net::ERR_BLOCKED_BY_CLIENT');
 | 
			
		||||
      });
 | 
			
		||||
      await expect(ajax(defaultURL)).to.eventually.be.rejectedWith('404');
 | 
			
		||||
      await expect(ajax(defaultURL)).to.eventually.be.rejected();
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue