diff --git a/opal/core/enumerable.rb b/opal/core/enumerable.rb
index <HASH>..<HASH> 100644
--- a/opal/core/enumerable.rb
+++ b/opal/core/enumerable.rb
@@ -754,6 +754,10 @@ module Enumerable
             return $breaker;
           }
 
+          if (value === nil) {
+            #{raise ArgumentError, "comparison failed"};
+          }
+
           if (value < 0) {
             result = param;
           }
@@ -768,7 +772,7 @@ module Enumerable
             return;
           }
 
-          if (#{`param` <=> `result`} < 0) {
+          if (#{Opal.compare(`param`, `result`)} < 0) {
             result = param;
           }
         };
diff --git a/spec/filters/bugs/enumerable.rb b/spec/filters/bugs/enumerable.rb
index <HASH>..<HASH> 100644
--- a/spec/filters/bugs/enumerable.rb
+++ b/spec/filters/bugs/enumerable.rb
@@ -15,9 +15,6 @@ opal_filter "Enumerable" do
   fails "Enumerable#member? returns true if any element == argument for numbers"
   fails "Enumerable#member? gathers whole arrays as elements when each yields multiple"
 
-  fails "Enumerable#min raises an ArgumentError for incomparable elements"
-  fails "Enumerable#min gathers whole arrays as elements when each yields multiple"
-
   fails "Enumerable#reduce returns nil when fails(legacy rubycon)"
   fails "Enumerable#reduce without inject arguments(legacy rubycon)"
Enumerable#min raises when it can't compare elements