diff --git a/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt b/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
index f5a7639..c549046 100644
--- a/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
+++ b/libraries/kotlin.test/js/src/main/kotlin/JsImpl.kt
@@ -46,18 +46,18 @@
 
 private val qunitAsserter = QUnitAsserter()
 
-internal var assertHook: (Boolean, String?, Any?, Any?) -> Unit = { _,_,_,_ -> }
+internal var assertHook: (result: Boolean, expected: Any?, actual: Any?, lazyMessage: () -> String?) -> Unit = { _, _, _, _ -> }
 
 // TODO: make object in 1.2
 class QUnitAsserter : Asserter {
 
-    val innerAsserter = object: Asserter {
+    private var expected: Any? = undefined
+    private var actual: Any? = undefined
+    private var msg: () -> String? = { null }
 
+    private val innerAsserter = object : Asserter {
         override fun fail(message: String?): Nothing {
-            failWithMessage(message)
-        }
-
-        private fun failWithMessage(message: String?): Nothing {
+            assertHook(false, expected, actual, msg)
             if (message == null)
                 throw AssertionError()
             else
@@ -65,33 +65,58 @@
         }
     }
 
+    private inline fun <T> withInfo(noinline msgFn: () -> String?,
+                                    e: Any? = undefined,
+                                    a: Any? = undefined,
+                                    fn: Asserter.() -> T): T {
+        msg = msgFn
+        expected = e
+        actual = a
+        innerAsserter.fn()
+        // If no exception was thrown
+        assertHook(true, expected, actual, msg)
+        // No need to clean up
+    }
+
     override fun assertEquals(message: String?, expected: Any?, actual: Any?) {
-        innerAsserter.assertEquals(message, expected, actual)
+        withInfo({ message }, expected, actual) {
+            assertEquals(message, expected, actual)
+        }
     }
 
     override fun assertNotEquals(message: String?, illegal: Any?, actual: Any?) {
-        super.assertNotEquals(message, illegal, actual)
+        withInfo({ message }, expected, actual) {
+            assertNotEquals(message, illegal, actual)
+        }
     }
 
     override fun assertNull(message: String?, actual: Any?) {
-        super.assertNull(message, actual)
+        withInfo({ message }, null, actual) {
+            assertNull(message, actual)
+        }
     }
 
     override fun assertNotNull(message: String?, actual: Any?) {
-        super.assertNotNull(message, actual)
+        withInfo({ message }, a = actual) {
+            assertNotNull(message, actual)
+        }
     }
 
     override fun assertTrue(lazyMessage: () -> String?, actual: Boolean) {
-        assertTrue(actual, lazyMessage())
+        withInfo(lazyMessage, true, actual) {
+            assertTrue(lazyMessage, actual)
+        }
     }
 
     override fun assertTrue(message: String?, actual: Boolean) {
-        okFun(actual, message)
-        if (!actual) failWithMessage(message)
+        withInfo({ message }, true, actual) {
+            assertTrue(message, actual)
+        }
     }
 
     override fun fail(message: String?): Nothing {
-        okFun(false, message)
-        failWithMessage(message)
+        withInfo({message}) {
+            fail(message)
+        }
     }
 }
\ No newline at end of file
