apiaryio / dredd

Language-agnostic HTTP API Testing Tool
https://dredd.org
MIT License
4.18k stars 279 forks source link

Force transaction.fail in dredd throws exception #431

Closed GiritharanR closed 7 years ago

GiritharanR commented 8 years ago

I am executing the apiary documentation using dredd in npm.

When I am trying to fail the transaction based on some conditions in hooks, the following exception occured and the reports aren't generated in apiary.io.

Hooks transaction failure code looks like below

transaction.fail = true;

Error

error: TypeError: Converting circular structure to JSON at Object.stringify (native) at ApiaryReporter._performRequestAsync (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/reporters/apiary-reporter.js:287:21) at ApiaryReporter._performRequestAsync (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/reporters/apiary-reporter.js:3:57) at EventEmitter. (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/reporters/apiary-reporter.js:140:22) at emitTwo (events.js:105:20) at EventEmitter.emit (events.js:185:7) at TransactionRunner.emitResult (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:424:38) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:108:34 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:207:16 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:251:17 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:154:25 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:248:21 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:157:24 at TransactionRunner.runHook (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:315:9) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:151:28 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:246:17 at iterate (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:146:13) at async.eachSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:162:9) at _asyncMap (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:245:13) at Object.mapSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:228:23) at Object.async.timesSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:1048:22) at TransactionRunner.runHooksForData (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:206:20) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:104:32 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:207:16 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:251:17 at async.eachSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:142:20) at _asyncMap (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:245:13) at Object.mapSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:228:23) at Object.async.timesSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:1048:22) at TransactionRunner.runHooksForData (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:206:20) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:100:30 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:652:16 at proxy (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/gavel/lib/validate.js:18:10) at Object.validate (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/gavel/lib/validate.js:60:10) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:611:20 at proxy (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/gavel/lib/validate.js:18:10) at Object.isValid (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/gavel/lib/validate.js:32:10) at TransactionRunner.validateTransaction (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:597:18) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:559:28 at TransactionRunner.runHooksForData (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:210:14) at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:555:26 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:207:16 at /home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:251:17 at async.eachSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:142:20) at _asyncMap (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:245:13) at Object.mapSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:228:23) at Object.async.timesSeries (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/async/lib/async.js:1048:22) at TransactionRunner.runHooksForData (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:206:20) at IncomingMessage. (/home/giritharan/git/bg-core-addresses/src/test/node/node_modules/dredd/lib/transaction-runner.js:551:24) at IncomingMessage.g (events.js:273:16) at emitNone (events.js:85:20) at IncomingMessage.emit (events.js:179:7) at endReadableNT (_stream_readable.js:906:12) at nextTickCallbackWith2Args (node.js:475:9) at process._tickCallback (node.js:389:17)

honzajavorek commented 8 years ago

@GiritharanR Thanks very much for reporting this!

honzajavorek commented 8 years ago

Does this happen for all kinds of transactions or just for some with certain data or structure? Could you disclose how the blueprint looks like for the transaction you are trying to force to fail?

GiritharanR commented 8 years ago

It is happening for all transactions. When I am forcefully make it fail, i got this exception.

honzajavorek commented 8 years ago

@GiritharanR And how does your blueprint look like? Could you share at least anonymized structure of it?

GiritharanR commented 8 years ago

Please find the example 1 below,

## Example Collection [/]

Description of the collection

### Get all [GET /{?qp1,qp2}]
+ Parameters

    + qp1: 2 (string,required) - decsription
    + qp2: 3 (string, required) - description

+ Request 'sample 1' (application/vnd.api+json)

+ Response 400 (application/vnd.api+json; charset=UTF-8)

            {
                "jsonapi": {
                    "version": "1.6"
                },
                "data": [
                    {
                       "id": "1",
                       "value":"value1"
                     },
                    {
                       "id": "2",
                       "value":"value2"
                     }
                ]
            }
GiritharanR commented 8 years ago

@honzajavorek - Added additional logs while running the dredd in command line, It may be useful to debug deeper

/usr/lib/node_modules/dredd/lib/reporters/apiary-reporter.js:159
        if ((base = data['resultData']['result'])['general'] == null) {
                                                 ^

TypeError: Cannot read property 'general' of undefined
  at EventEmitter.<anonymous> (/usr/lib/node_modules/dredd/lib/reporters/apiary-reporter.js:159:50)
  at emitTwo (events.js:105:20)
  at EventEmitter.emit (events.js:185:7)
  at TransactionRunner.emitError (/usr/lib/node_modules/dredd/lib/transaction-runner.js:164:41)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:140:21
  at /usr/lib/node_modules/dredd/node_modules/async/lib/async.js:246:17
  at iterate (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:146:13)
  at async.eachSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:162:9)
  at _asyncMap (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:245:13)
  at Object.mapSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:228:23)
  at Object.async.timesSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:1048:22)
  at TransactionRunner.runHooksForData (/usr/lib/node_modules/dredd/lib/transaction-runner.js:146:20)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:389:32
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:147:16
  at /usr/lib/node_modules/dredd/node_modules/async/lib/async.js:251:17
  at async.eachSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:142:20)
  at _asyncMap (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:245:13)
  at Object.mapSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:228:23)
  at Object.async.timesSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:1048:22)
  at TransactionRunner.runHooksForData (/usr/lib/node_modules/dredd/lib/transaction-runner.js:146:20)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:388:30
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:590:16
  at proxy (/usr/lib/node_modules/dredd/node_modules/gavel/lib/validate.js:18:10)
  at Object.validate (/usr/lib/node_modules/dredd/node_modules/gavel/lib/validate.js:60:10)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:549:20
  at proxy (/usr/lib/node_modules/dredd/node_modules/gavel/lib/validate.js:18:10)
  at Object.isValid (/usr/lib/node_modules/dredd/node_modules/gavel/lib/validate.js:32:10)
  at TransactionRunner.validateTransaction (/usr/lib/node_modules/dredd/lib/transaction-runner.js:535:18)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:504:30
  at TransactionRunner.runHooksForData (/usr/lib/node_modules/dredd/lib/transaction-runner.js:150:14)
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:503:28
  at /usr/lib/node_modules/dredd/lib/transaction-runner.js:147:16
  at /usr/lib/node_modules/dredd/node_modules/async/lib/async.js:251:17
  at async.eachSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:142:20)
  at _asyncMap (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:245:13)
  at Object.mapSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:228:23)
  at Object.async.timesSeries (/usr/lib/node_modules/dredd/node_modules/async/lib/async.js:1048:22)
  at TransactionRunner.runHooksForData (/usr/lib/node_modules/dredd/lib/transaction-runner.js:146:20)
  at IncomingMessage.<anonymous> (/usr/lib/node_modules/dredd/lib/transaction-runner.js:502:26)
  at IncomingMessage.g (events.js:273:16)
  at emitNone (events.js:85:20)
  at IncomingMessage.emit (events.js:179:7)
  at endReadableNT (_stream_readable.js:906:12)
  at nextTickCallbackWith2Args (node.js:475:9)
  at process._tickCallback (node.js:389:17)
honzajavorek commented 8 years ago

@GiritharanR Thank you very, very much! This is an excellent report. I'll do my best to investigate and find a fix. :hammer:

honzajavorek commented 7 years ago

@GiritharanR Could you please upgrade to the latest Dredd and try out if this is still an issue? There were related fixes in #648.

honzajavorek commented 7 years ago

@GiritharanR Feel free to re-open this if you experience any issues 🙂 Thanks for reporting this and helping to debug it! 👍