Skip to content

Commit fcca293

Browse files
committed
Define additional methods to JS::Object for testing
1 parent 253e5d6 commit fcca293

File tree

4 files changed

+19
-2
lines changed

4 files changed

+19
-2
lines changed

packages/gems/js/lib/js.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,9 @@ def await
252252
::JS.promise_scheduler.await(promise)
253253
end
254254

255-
# https://github.com/rails/rails/blob/5c0b7496ab32c25c80f6d1bdc8b32ec6f75ce1e4/activerecord/lib/active_record/promise.rb#L40-L42
256-
[:nil?, :is_a?].each do |method|
255+
# I don't know why, but I can't define the respond_to? method in refinements.
256+
# I'm defining it here instead.
257+
[:nil?, :is_a?, :raise, :respond_to?].each do |method|
257258
define_method(method, ::Object.instance_method(method))
258259
end
259260

packages/npm-packages/ruby-wasm-wasi/test/unit/test_error.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
require "js"
33

44
class JS::TestError < Test::Unit::TestCase
5+
using JsObjectTestable
6+
57
def test_throw_error
68
e = assert_raise(JS::Error) { JS.eval("throw new Error('foo')") }
79
assert_match /^Error: foo/, e.message

packages/npm-packages/ruby-wasm-wasi/test/unit/test_float.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
require "js"
33

44
class JS::TestFloat < Test::Unit::TestCase
5+
using JsObjectTestable
6+
57
def test_to_js
68
assert_equal (1.0).to_js, JS.eval("return 1.0;")
79
assert_equal (0.5).to_js, JS.eval("return 0.5;")

packages/npm-packages/ruby-wasm-wasi/tools/run-test-unit.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,18 @@ const test = async (instantiate) => {
169169

170170
await vm.evalAsync(`
171171
require 'test/unit'
172+
173+
# Define the methods to be used for unit testing assertions.
174+
# Use refinements to limit the scope of influence.
175+
require 'pp'
176+
module JsObjectTestable
177+
refine JS::Object do
178+
[:object_id, :pretty_inspect].each do |method|
179+
define_method(method, ::Object.instance_method(method))
180+
end
181+
end
182+
end
183+
172184
require_relative '${rootTestFile}'
173185
ok = Test::Unit::AutoRunner.run
174186
exit(1) unless ok

0 commit comments

Comments
 (0)