单元测试moonscript awesome config

时间:2015-07-18 23:56:48

标签: lua awesome-wm moonscript

我想要学习一些lua / moonscript,将我的真棒配置文件(rc.lua)迁移到moonscriptunit-test一路上。为此我设置了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还没有超过前几次需要调用,因此根本没有全局可用,或者至少没有定义其功能。
最后,这引出了我的问题:

为什么在你日常的真棒启动期间(甚至是可怕的核心模块)都会在第一时间运行,在尝试复制环境时我会错过什么。 < / p>

非常感谢您提前 你真的

1 个答案:

答案 0 :(得分:1)

令人敬畏的C核心导出了一些对象供lua使用。可怕的(以及许多其他人)直接使用这些。这些都很棒(见https://awesome.naquadah.org/doc/api/):

  • 标签
  • 计时器
  • DRAWIN
  • keygrabber
  • 绘制
  • 小鼠
  • 客户端
  • 屏幕
  • 真棒
  • mousegrabber
  • 选择
  • DBUS
  • 按钮

其中大多数都有糟糕的包装,它们添加了有用的东西(例如key vs awful.key,同样用于tag,keygrabber,button)。其他东西完全隐藏在&#34;普通用户&#34; (例如画画,画画)。

你也应该能够模拟它们,但你必须设置具有相同名称的全局变量。

编辑:顺便说一句,这就是为什么你不能在正常的lua promt中require("awful")。缺少相同的内置对象。