2017-06-06 9 views
1

私はBustedを使って既存のluaファイルの単体テストを書こうとしています。テスト中にいくつかのメソッドを交換したいので、実際のファイルではなく模擬/スタブ付きのメソッドでファイルを実行します(それ以外の場合は失敗します)。ファイルが呼び出すメソッドの中には、他のluaライブラリから取り込まれたものもあります。私もこれらを嘲笑したいと思います。Bustedテスト中の既存のluaファイルのメソッドをモックする

これはどのように達成できますか?

ご協力いただきありがとうございます。

答えて

1

ローカル関数を簡単に置き換えることはできませんが、エクスポート関数やグローバル関数を置き換えるのは簡単です。

たとえば、rest.httpライブラリからhttp:new().request(...)経由でHTTPコールをモックする必要がありました。これは私のテストで行ったことです:

local http = require 'resty.http' 
http.new = function() 
    return { 
    request = function(self, args) 
     -- ... some mock implementation 
    end 
    } 
end 

このアプローチは、エクスポートされたすべての機能に有効です。たとえば、ライブラリbarの関数fooを置き換えるとします。

グローバル関数や変数を変更
local bar = require 'bar' 
bar.foo = myMockImpl 

は、例えば、_Gを上書きすることによって達成することができ、これはグローバル関数や変数fooを変更します:

_G.foo = ... 

バステッドは自動的に環境を復元するためにサポートしています。 documentationの「insulate」を検索してください。

関連する問題