Skip to content

Commit

Permalink
fix(Dangerfile): report errors when evaluating Dangerfile
Browse files Browse the repository at this point in the history
resolves #250
  • Loading branch information
macklinu authored and orta committed Aug 15, 2017
1 parent 9bc5b21 commit 515537a
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 27 deletions.
2 changes: 2 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

// TODO

* Handle exceptions in Dangerfile and report them as failures in Danger results - macklinu

### 2.0.0-alpha.6-7

* Expose a Promise object to the external GitHub API - orta
Expand Down
50 changes: 30 additions & 20 deletions source/runner/DangerfileRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,26 +92,36 @@ export async function runDangerfileEnvironment(
// return originalRequire.apply(this, arguments)
// }

vm.run(content, filename)

const results = environment.sandbox!.results!
await Promise.all(
results.scheduled.map((fnOrPromise: any) => {
if (fnOrPromise instanceof Promise) {
return fnOrPromise
}
if (fnOrPromise.length === 1) {
// callback-based function
return new Promise(res => fnOrPromise(res))
}
return fnOrPromise()
})
)
return {
fails: results.fails,
warnings: results.warnings,
messages: results.messages,
markdowns: results.markdowns,
try {
vm.run(content, filename)

const results = environment.sandbox!.results!
await Promise.all(
results.scheduled.map((fnOrPromise: any) => {
if (fnOrPromise instanceof Promise) {
return fnOrPromise
}
if (fnOrPromise.length === 1) {
// callback-based function
return new Promise(res => fnOrPromise(res))
}
return fnOrPromise()
})
)
return {
fails: results.fails,
warnings: results.warnings,
messages: results.messages,
markdowns: results.markdowns,
}
} catch (e) {
console.error("Unable to evaluate the Dangerfile")
return {
fails: [{ message: `\`\`\`\n${e.stack}\n\`\`\`` }],
warnings: [],
messages: [],
markdowns: [],
}
}
}

Expand Down
17 changes: 10 additions & 7 deletions source/runner/_tests/_danger_runner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,14 +61,9 @@ describe("with fixtures", () => {
it("handles a failing dangerfile", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileBadSyntax.js"), undefined, runtime)

try {
await runDangerfileEnvironment(resolve(fixtures, "__DangerfileBadSyntax.js"), undefined, runtime)
throw new Error("Do not get to this")
} catch (e) {
// expect(e.message === ("Do not get to this")).toBeFalsy()
expect(e.message).toEqual("hello is not defined")
}
expect(results.fails[0].message).toContain("hello is not defined")
})

it.skip("handles relative imports correctly in Babel", async () => {
Expand Down Expand Up @@ -178,6 +173,14 @@ describe("with fixtures", () => {

expect(results.fails[0].message).toContain("@types dependencies were added to package.json")
})

it("does not swallow errors thrown in Dangerfile", async () => {
const context = await setupDangerfileContext()
const runtime = await createDangerfileRuntimeEnvironment(context)
const results = await runDangerfileEnvironment(resolve(fixtures, "__DangerfileThrows.js"), undefined, runtime)

expect(results.fails[0].message).toContain("Error: failure")
})
})

describe("cleaning Dangerfiles", () => {
Expand Down
1 change: 1 addition & 0 deletions source/runner/_tests/fixtures/__DangerfileThrows.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
throw new Error("failure")

0 comments on commit 515537a

Please sign in to comment.