]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: improve warning assertions
authorEvan You <yyx990803@gmail.com>
Tue, 3 Sep 2019 20:17:26 +0000 (16:17 -0400)
committerEvan You <yyx990803@gmail.com>
Tue, 3 Sep 2019 20:17:26 +0000 (16:17 -0400)
packages/runtime-test/src/jestUtils.ts

index e8997103db30af131e3a68968f7cf2fa70d3d763..6ebbcb91bcc244897ba29c384fc8cbce54dd637e 100644 (file)
@@ -11,6 +11,7 @@ declare global {
 export function mockWarn() {
   expect.extend({
     toHaveBeenWarned(received: string) {
+      asserted.add(received)
       const passed = warn.mock.calls.some(
         args => args[0].indexOf(received) > -1
       )
@@ -30,6 +31,7 @@ export function mockWarn() {
     },
 
     toHaveBeenWarnedLast(received: string) {
+      asserted.add(received)
       const passed =
         warn.mock.calls[warn.mock.calls.length - 1][0].indexOf(received) > -1
       if (passed) {
@@ -48,6 +50,7 @@ export function mockWarn() {
     },
 
     toHaveBeenWarnedTimes(received: string, n: number) {
+      asserted.add(received)
       let found = 0
       warn.mock.calls.forEach(args => {
         if (args[0].indexOf(received) > -1) {
@@ -71,13 +74,29 @@ export function mockWarn() {
   })
 
   let warn: jest.SpyInstance
+  const asserted: Set<string> = new Set()
 
   beforeEach(() => {
+    asserted.clear()
     warn = jest.spyOn(console, 'warn')
     warn.mockImplementation(() => {})
   })
 
   afterEach(() => {
+    const assertedArray = Array.from(asserted)
+    const nonAssertedWarnings = warn.mock.calls
+      .map(args => args[0])
+      .filter(received => {
+        return !assertedArray.some(assertedMsg => {
+          return received.indexOf(assertedMsg) > -1
+        })
+      })
     warn.mockRestore()
+    if (nonAssertedWarnings.length) {
+      nonAssertedWarnings.forEach(warning => {
+        console.warn(warning)
+      })
+      throw new Error(`test case threw unexpected warnings.`)
+    }
   })
 }