title: How to use nock to intercept requests regardless of body
body: <p>I'm trying to use nock in my tests to intercept the request calls i'm making from the native <code>https</code> module in Node.js.  <code>I'm using Promise.all</code> to make two requests to the external server.  I want my tests to intercept the calls, and check some of the form fields to make sure they're filled in as i want.</p>
  
  <p>I have my class setup below (kept the most relevant parts of code in):</p>
  
  <pre><code>const archiver = require('archiver');
  const { generateKeyPairSync } = require('crypto');
  const FormData = require('form-data');
  const fs = require('fs');
  const https = require('https');
  
  class Platform {
    constructor() {
      this.FILESTORE_USERNAME = process.env.FILESTORE_USERNAME;
      this.FILESTORE_PASSWORD = process.env.FILESTORE_PASSWORD;
    }
  
    store(serviceName) {
      const { publicKey, privateKey } = this._generateKeys();
  
      return Promise.all([this._postKey(publicKey), this._postKey(privateKey)])
        .then(() =&gt; {
          return this._zipKeys(publicKey, privateKey, serviceName);
        })
        .catch((err) =&gt; {
          throw err;
        });
    }
  
    _postKey(key) {
      const options = this._getOptions();
      const keyName = (key.search(/(PUBLIC)/) !== -1) ? 'publicKey' : 'privateKey';
      const form = new FormData();
      form.append('file', key);
      form.append('Name', keyName);
      form.append('MimeMajor', 'application');
      form.append('MimeMinor', 'x-pem-file');
      form.append('Extension', (keyName == 'publicKey') ? 'pub' : '');
      form.append('FileClass', 'MFS::File');
      options.headers = form.getHeaders();
      options.headers.Authorization = 'Basic ' + Buffer.from(this.FILESTORE_USERNAME + ':' + this.FILESTORE_PASSWORD).toString('base64');
  
      return new Promise((resolve, reject) =&gt; {
        let post = https.request(options, (res) =&gt; {
          let data = '';
          if (res.statusCode &lt; 200 || res.statusCode &gt; 299) {
            reject(new Error('File Storage API returned a status code outside of acceptable range: ' + res.statusCode));
          } else {
            res.setEncoding('utf8');
            res.on('data', (chunk) =&gt; {
              data += chunk;
            });
  
            res.on('error', (err) =&gt; {
              reject(err);
            });
  
            res.on('end', () =&gt; {
              if (data) {
                resolve(JSON.parse(data));
              } else {
                resolve();
              }
            });
          }
        });
        post.on('error', (err) =&gt; {
          reject(err);
        });
        form.pipe(post);
        post.end();
  
      });
    }
  
    _getOptions() {
      return {
        hostname: 'api.example.com',
        path: '/media/files/',
        method: 'POST',
      };
    }
  }
  
  module.exports = Platform;
  </code></pre>
  
  <p>And then, my testing code looks like the below.  I'm using mocha, sinon, chai, sinon-chai and nock.</p>
  
  <pre><code>const Platform = require('/usr/src/app/api/Services/Platform');
  const crypto = require('crypto');
  const fs = require('fs');
  const nock = require('nock');
  const yauzl = require('yauzl');
  
  describe('Platform', function() {
    let platform;
    beforeEach(() =&gt; {
      platform = new Platform();
    });
    afterEach(() =&gt; {
      const list = fs.readdirSync('/usr/src/app/api/Services/data/');
      list.forEach((file) =&gt; {
        fs.unlink('/usr/src/app/api/Services/data/' + file, (err) =&gt; {
          if (err) throw err;
        });
      });
      nock.cleanAll();
    });
    after(() =&gt; {
      nock.restore();
    });
    describe('store', function() {
      it('should post each generated key to an external storage place', async function() {
        this.timeout(5000);
        // const stub = sinon.stub(platform, '_postKey').resolves();
        const scope = nock('https://api.example.com')
          .persist()
          .post('/media/files/', (body) =&gt; {
            // console.log(body);
          })
          .reply(200);
  
        let serviceName = 'test';
        let actual = await platform.store(serviceName)
          .catch((err) =&gt; {
            (() =&gt; { throw err; }).should.not.throw();
          });
  
        console.log(scope);
        // expect(stub.callCount).to.equal(2);
        expect(actual).to.be.a('string');
        expect(actual).to.include(serviceName + '.zip');
        // stub.reset();
  
      });
    });
  });
  </code></pre>
  
  <p>The problem I am coming across is this error that is thrown when running my tests:</p>
  
  <blockquote>
    <p>AssertionError: expected [Function] to not throw an error but 'Error:
    Nock: No match for request {\n  "method": "POST",\n  "url":
    "<a href="https://api.example.com/media/files/" rel="nofollow noreferrer">https://api.example.com/media/files/</a>",\n  "headers": {\n<br>
    "content-type": "multipart/form-data;
    boundary=--------------------------363749230271182821931703",\n<br>
    "authorization": "Basic abcdef1224u38454857483hfjdhjgtuyrwyt="\n  },\n
    "body":
    "----------------------------363749230271182821931703\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n-----BEGIN PUBLIC
    KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq+QnVOYVjbrHIlAEsEoF\nZ4sTvqiB3sJGwecNhmgrUp9U8oqgoB50aW6VMsL71ATRyq9b3vMQKpjbU3R2RcOF\na6mlaBtBjxDGu2nEpGX++mtPCdD9HV7idvWgJ3XS0vGaCM//8ukY+VLBc1IB8CHC\nVj+8YOD5Y9TbdpwXR+0zCaiHwwd8MHIo1kBmQulIL7Avtjh55OmQZZtjO525lbqa\nWUZ24quDp38he2GjLDeTzHm9z1RjYJG6hS+Ui0s2xRUs6VAr7KFtiJmmjxPS9/vZ\nwQyFcz/R7AJKoEH8p7NE7nn/onbybJy+SWRxjXVH8afHkVoC65BiNoMiEzk1rIsx\ns92woHnq227JzYwFYcLD0W+TYjtGCB8+ks+QRIiV0pFJ3ja5VFIxjn9MxLntWcf2\nhsiYrmfJlqmpW1DMfZrtt41cJUFQwt7CpN72aix7btmd/q0syh6VVlQEHq/0nDky\nItv7dqyqZc9NNOMqK9/kXWhbq5cwS21mm+kTGas5KSdeIR0LH7uVtivB+LKum14e\nRDGascZcXZIVTbOeCxA6BD7LyaJPzXmlMy4spXlhGoDYyVRhpvv2K03Mg7ybiB4X\nEL1oJtiCFkRX5LtRJv0PCRJjaa3UvfyIuz8bHK4ANxIZqcwZwER+g02gw8iqNfMa\nDWXpfMJUU8TQuLGWZQaGJc8CAwEAAQ==\n-----END
    PUBLIC
    KEY-----\n\r\n----------------------------363749230271182821931703\r\nContent-Disposition: form-data;
    name=\"Name\"\r\n\r\npublicKey\r\n----------------------------363749230271182821931703\r\nContent-Disposition: form-data;
    name=\"MimeMajor\"\r\n\r\napplication\r\n----------------------------363749230271182821931703\r\nContent-Disposition: form-data;
    name=\"MimeMinor\"\r\n\r\nx-pem-file\r\n----------------------------363749230271182821931703\r\nContent-Disposition: form-data;
    name=\"Extension\"\r\n\r\npub\r\n----------------------------363749230271182821931703\r\nContent-Disposition: form-data;
    name=\"FileClass\"\r\n\r\nMFS::File\r\n----------------------------363749230271182821931703--\r\n"\n}'
    was thrown</p>
  </blockquote>
  
  <p>I take it it's because nock expects me to fake out the body for the request to get a correct match?  Is there a way of just looking for requests made to that address, regardless of the body, so I can do my own tests or whatever.</p>