usebruno / bruno

Opensource IDE For Exploring and Testing Api's (lightweight alternative to postman/insomnia)
https://www.usebruno.com/
MIT License
25.4k stars 1.16k forks source link

Assert function can't access to req.body object #3042

Open SPIRIT-00 opened 1 week ago

SPIRIT-00 commented 1 week ago

I have checked the following:

Describe the bug

Bug in title.

.bru file to reproduce the bug

No response

Screenshots/Live demo link

изображение

JorgeTrovisco commented 3 days ago

@SPIRIT-00 can you please provide a .bru file where this can be reproduced, or at least provide a screenshot for the assertion that is failing (not the result, the assertion tab)

Thanks 😉

SPIRIT-00 commented 3 days ago

@SPIRIT-00 can you please provide a .bru file where this can be reproduced, or at least provide a screenshot for the assertion that is failing (not the result, the assertion tab)

Thanks 😉

Yep, it test from another issue:

meta {
  name: interpolation
  type: http
  seq: 1
}

post {
  url: {{TestServerApi}}
  body: none
  auth: none
}

vars:pre-request {
  Rstring: string
  Rboolean: false
  Rnumber: 2
  Rnull: null
  Rundefined: undefined
}

assert {
  req.body: isDefined
  res.body: isDefined
}

script:pre-request {
  const body = {
    EnvLevelVars: {
      Estring: [bru.getEnvVar('Estring'), 'string'],
      Eboolean: [bru.getEnvVar('Eboolean'), 'boolean'],
      Enumber: [bru.getEnvVar('Enumber'), 'number'],
      Enull: [bru.getEnvVar('Enull'), 'null'],
      Eundefined: [bru.getEnvVar('Eundefined'), 'undefined']
    },
    CollectionLevelVars: {
      Cstring: [bru.getVar('Cstring'), 'string'],
      Cboolean: [bru.getVar('Cboolean'), 'boolean'],
      Cnumber: [bru.getVar('Cnumber'), 'number'],
      Cnull: [bru.getRequestVar('Cnull'), 'null'],
      Cundefined: [bru.getRequestVar('Cundefined'), 'undefined']
    },
    FolderLevelVars: {
      Fstring: [bru.getVar('Fstring'), 'string'],
      Fboolean: [bru.getVar('Fboolean'), 'boolean'],
      Fnumber: [bru.getVar('Fnumber'), 'number'],
      Fnull: [bru.getRequestVar('Fnull'), 'null'],
      Fundefined: [bru.getRequestVar('Fundefined'), 'undefined']
    },
    RequestLevelVars: {
      Rstring: [bru.getRequestVar('Rstring'), 'string'],
      Rboolean: [bru.getRequestVar('Rboolean'), 'boolean'],
      Rnumber: [bru.getRequestVar('Rnumber'), 'number'],
      Rnull: [bru.getRequestVar('Rnull'), 'null'],
      Rundefined: [bru.getRequestVar('Rundefined'), 'undefined']
    }
  };
  req.setBody(body);
}

tests {
  const vars = {
    EnvLevelVars: {
      Estring: [bru.getEnvVar('Estring'), 'string'],
      Eboolean: [bru.getEnvVar('Eboolean'), 'boolean'],
      Enumber: [bru.getEnvVar('Enumber'), 'number'],
      Enull: [bru.getEnvVar('Enull'), 'null'],
      Eundefined: [bru.getEnvVar('Eundefined'), 'undefined']
    },
    CollectionLevelVars: {
      Cstring: [bru.getCollectionVar('Cstring'), 'string'],
      Cboolean: [bru.getCollectionVar('Cboolean'), 'boolean'],
      Cnumber: [bru.getCollectionVar('Cnumber'), 'number'],
      Cnull: [bru.getCollectionVar('Cnull'), 'null'],
      Cundefined: [bru.getCollectionVar('Cundefined'), 'undefined']
    },
    FolderLevelVars: {
      Fstring: [bru.getFolderVar('Fstring'), 'string'],
      Fboolean: [bru.getFolderVar('Fboolean'), 'boolean'],
      Fnumber: [bru.getFolderVar('Fnumber'), 'number'],
      Fnull: [bru.getFolderVar('Fnull'), 'null'],
      Fundefined: [bru.getFolderVar('Fundefined'), 'undefined']
    },
    RequestLevelVars: {
      Rstring: [bru.getRequestVar('Rstring'), 'string'],
      Rboolean: [bru.getRequestVar('Rboolean'), 'boolean'],
      Rnumber: [bru.getRequestVar('Rnumber'), 'number'],
      Rnull: [bru.getRequestVar('Rnull'), 'null'],
      Rundefined: [bru.getRequestVar('Rundefined'), 'undefined']
    }
  };

  for (const level in vars) {
    const levelVal = vars[level];
    for (const value in levelVal) {
      const vl = levelVal[value][0];
      const awaited = levelVal[value][1];
      test(`${level}.${value} = <${vl}>, DataType is <${getDataType(vl)}> must be <${awaited}>.`, () => {
        expect(getDataType(vl)).to.equal(awaited);
      });
    }
  }

  function getDataType(value) {
    const dataType = typeof value;
    switch (dataType) {
        case 'number': if (isNaN(value)) { return 'NaN'; } else { return dataType; } break
        case 'object': if (Array.isArray(value)) { return 'array'; } else if (value == null) { return 'null'; } else { return dataType; } break
        default: return dataType;
    }
  }
}

As you may see body not defined, but it seted by pre-req script. Some screenshots: No body defined: изображение Body seted by script: изображение Assert tab: изображение Timeline, body exists: изображение Assert fail: изображение