我想要学习一些 lua/moonscript 的方法是将我很棒的配置文件 (rc.lua) 迁移到moonscript并在此过程中对一些东西进行单元测试。为此,我将 rc.lua 设置为需要这样的 moonscript 配置文件
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
快进到当我的测试配置文件需要“糟糕”模块时:它的 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 调用,因此根本不全局可用,或者至少还没有定义它的功能。
最后,这使我想到了一个问题:
为什么这甚至会在你每天很棒的启动过程中运行(糟糕的几乎是核心模块),以及在尝试复制它所在的环境时我错过了什么。
非常感谢您提前。
敬上