2

lua/moonscript を学ぶために私がやろうとしているのは、すばらしい構成ファイル (rc.lua) をmoonscriptに移行し、途中でいくつかのことを単体テストすることです。このために、次のような Moonscript 構成ファイルを要求するように rc.lua をセットアップしました。

package.path = pathsToAdd .. package.path
-- a bit of a hassle to amend the lua require paths
-- correctly; I boldly assume for now that these are not the
-- cause of the problem
require('moonscript')
require('config')

私の構成がモジュール「ギア」の特定の機能を呼び出すかどうかを確認する最初の単体テストでは、すべてがかなりうまくいきました。後続のすべての呼び出しのギアモジュールをモックすることになりました

require('gears')

そのように単体テストを設定することによって

package.loaded.gears = myMockVersion

テスト中の構成ファイルが「awful」モジュールを要求する必要があるときまで早送りします。そのinit.luaが呼び出され、すぐに実行されます

return
{
    client = require("awful.client");
    ...
}

これはclient.luaの実行につながります

...
local tag = require("awful.tag")
...
local client = {}
-- define lots of functions, register some signal handlers
return client

そして今、まだ読んでいる皆さんのために、tag.lua の問題:

...
local capi =
{
    ...
    client = client,
    ...
}
...
capi.client.connect_signal(...)

その最後の呼び出しは古き良きものをスローします

attempt to index a nil value (field 'client')

これは、 client.lua が最初のいくつかの require 呼び出しをまだ実行していないため、グローバルにまったく使用できないか、少なくともその機能をまだ定義していないためだと思います。
最後に、次の質問に至ります。

そもそもなぜこれはあなたの毎日の素晴らしい起動中にさえ実行されるのですか (awful はほとんどコアモジュールです)、それが実行される環境を複製しようとするときに何が欠けていますか.

よろしくお願いします。
敬具

4

1 に答える 1