2014-10-02 3 views
1

난 BJD와 노드 JS를 사용하여 grunt-triggered Cucumber JS 작업을 시도하고 있는데, 잘 작동한다는 것을 제외하고는 전체 JS 예외 스택을보고 싶지는 않다. 대신, 나는 차라리 예외의 (더 유용한) 머리를 보게 될 것이다. 사소한 것처럼 보일지 모르지만, BDD는 이러한 종류의 도구에서 빠른 피드백을 얻는 것이 가장 효과적이라고 믿습니다. 아직 명시되지 이것은 다음 더 유용 뒤에Cucumber JS의 오류 헤더 만 표시하려면 어떻게해야합니까?

TypeError: Object #<Object> has no method 'delete' 
    at World.<anonymous> ($HOME/features/step_definitions/delete-item.steps.js:20:21) 
    at Object.invoke ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/step_definition.js:84:14) 
    at Object.execute ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:157:22) 
    at Object.acceptVisitor ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:149:12) 
    at Object.executeStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:178:12) 
    at Object.processStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:173:14) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:66:16 
    at callUserFunctionAndBroadcastAfterEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:90:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at onRuntimeListenersComplete ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:113:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:16:7 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:15:18) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:118:51 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at Object.broadcastEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:109:7) 
    at Object.broadcastBeforeEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:100:12) 
    at Object.broadcastEventAroundUserFunction ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:84:12) 
    at Object.visitStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:63:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:95:17 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at onRuntimeListenersComplete ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:113:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:16:7 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:15:18) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:118:51 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at Object.broadcastEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:109:7) 
    at Object.broadcastAfterEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:105:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:95:32 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at onRuntimeListenersComplete ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:113:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at handleStepResult ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:27:5) 
    at hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:6:9) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:16:7 
    at handleStepResult ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/stats_journal.js:39:5) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:6:9) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:15:18) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:118:51 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at Object.broadcastEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:109:7) 
    at Object.visitStepResult ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:79:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:150:17 
    at codeCallback ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/step_definition.js:61:11) 
    at World.<anonymous> ($HOME/features/step_definitions/delete-item.steps.js:16:3) 
    at Object.invoke ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/step_definition.js:84:14) 
    at Object.execute ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:157:22) 
    at Object.acceptVisitor ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:149:12) 
    at Object.executeStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:178:12) 
    at Object.processStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:173:14) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:66:16 
    at callUserFunctionAndBroadcastAfterEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:90:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at onRuntimeListenersComplete ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:113:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:16:7 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:15:18) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:118:51 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at Object.broadcastEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:109:7) 
    at Object.broadcastBeforeEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:100:12) 
    at Object.broadcastEventAroundUserFunction ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:84:12) 
    at Object.visitStep ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:63:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:95:17 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at Object.instructVisitorToVisitSteps ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:94:13) 
    at Object.instructVisitorToVisitScenarioSteps ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:90:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:75:14 
    at Object.instructVisitorToVisitBackgroundSteps ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:85:9) 
    at Object.acceptVisitor ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/scenario.js:74:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:48:41 
    at callUserFunction ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/library/hooker.js:41:11) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at Object.triggerBeforeHooks ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/library/hooker.js:63:19) 
    at callBeforeHooks ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/library/hooker.js:37:16) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at hookedUpFunction ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/library/hooker.js:27:21) 
    at callUserFunctionAndBroadcastAfterEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:90:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at onRuntimeListenersComplete ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:113:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:14:11) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:20:11 
    at hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:8:9) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:16:7 
    at handleBeforeScenarioEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/stats_journal.js:24:5) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener.js:6:9) 
    at Object.hear ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/listener/summary_formatter.js:15:18) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:118:51 
    at processItem ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:19:9) 
    at iterate ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:12:11) 
    at Object.forEach ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/type/collection.js:23:7) 
    at broadcastToListeners ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:117:19) 
    at Object.broadcastEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:109:7) 
    at Object.broadcastBeforeEvent ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:100:12) 
    at Object.broadcastEventAroundUserFunction ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:84:12) 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/runtime/ast_tree_walker.js:52:14 
    at $HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/library.js:71:11 
    at process._tickCallback (node.js:419:13) 
    at Function.Module.runMain (module.js:499:11) 
    at startup (node.js:119:16) 
    at node.js:906:3 

만 : 예를 들어, 여기에 모듈의 기본 누락 된 방법에서 전체 스택 추적의

Failing scenarios: 
$HOME/features/delete-item.feature:6 # Scenario: Item removed from portfolio 
$HOME/features/delete-item.feature:11 # Scenario: Item not accessible from portfolio 

4 scenarios (2 failed, 2 passed) 
12 steps (2 failed, 2 skipped, 8 passed) 

정말, 유일한 대부분의 경우 내가 신경 쓰는 것은 처음 네 줄입니다.

TypeError: Object #<Object> has no method 'delete' 
at World.<anonymous> ($HOME/features/step_definitions/delete-item.steps.js:20:21) 
at Object.invoke ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/support_code/step_definition.js:84:14) 
at Object.execute ($HOME/node_modules/grunt-cucumber/node_modules/cucumber/lib/cucumber/ast/step.js:157:22) 

아이디어가 있으십니까?

답변

1

노드에서 수집 된 스택 추적의 크기를 절대적으로 제한 할 수 있습니다. 코드에서

은 만 오류 메시지 (헤더) 및 스택 추적의 아무도를 기록하려면 다음 설정

Error.stackTraceLimit = 0; 

또는 첫 번째 네 줄 (오류 메시지 플러스 3 개 스택 프레임을 볼 수)

Error.stackTraceLimit = 3; 

이 값은 수집 노드에게 스택 프레임의 최대 수를 제공합니다 사용, 그래서 당신은 어떤 주어진 상황에서 오류 로깅을 위해 적절한의 IT 무엇이든에 설정할 수 있습니다.

당신은, 당신이 사용할 수있는 모든 지점에서 전체 스택 트레이스를 수집하기 위해 다시 설정해야 하는가

Error.stackTraceLimit = Infinity; 

UPDATE

또한 hide-stack-frames-from

를 사용하여보고 할 수 있습니다 이것은 스택 트레이스에서 불필요한 프레임을 걸러 냄으로써 상대적으로보다 더 적절한 스택 추적을 제거하는 실제 문제를 해결합니다. 스택을 자르고 그 첫 번째 n 줄을 원하면 루트 문제를 지적 할 수 있습니다.

예를 들어, 당신은

require('hide-stack-frames-from')('cucumber', 'bluebird', 'superagent'); 

그냥 스택 프레임은 필터링하려는 모듈의 이름을 통과하여 위의 라인을 교체 할 수 있습니다.

+0

나와 함께하는 경우가 많기 때문에 나는 다른 것으로 옮겼습니다. 그러나 시간을내어 주셔서 감사합니다. 내가 요청한 것을 할 것이라는 관점에서 대답으로 받아들이 겠지만, 나는 그것을 시도하지 않았다고 고백한다. 어쩌면 누군가가 필요/미래에 확인할 수 있습니다 ... – GMeister

관련 문제