ぶていのログでぶログ

思い出したが吉日

mruby-test-stubを作った

mruby-yyjsonのテストコードを書くために、一部stubしたい部分ができた。 mruby-mtestにはstubする機能なく、mgem-listにもなさそうなので作った。

作ったと言ってもほとんどminitestのポーティングみたいな感じでスッと作れてよかった。

使い方

mrgem.rakeに以下を追加する。 これを追加するとrake testするときにObject.#stubが追加される。

# mrbgem.rake
MRuby::Gem::Specification.new('mruby-yyjson') do |spec|
-- snip --
  spec.add_test_dependency 'mruby-test-stub', github: 'buty4649/mruby-test-stub', branch: 'main'
-- snip --
end

以下はmruby-yyjsonでの利用例。

assert('JSON.#load') do
  stub = lambda do |obj, opts|
    assert_equal 'mruby-yyjson', obj, "Expected 'mruby-yyjson' as input to JSON.parse"
    assert_equal({ symbolize_names: true }, opts, 'Expected options { symbolize_names: true } for JSON.parse')
    'stub parse'
  end

  JSON.stub(:parse, stub) do
    assert_equal 'stub parse', JSON.load('mruby-yyjson', symbolize_names: true)
  end
end

基本的にはminitestのように使えるはず。