单元测试 moonscript 很棒的配置
Unit testing a moonscript awesome config
我想学习一些 lua/moonscript 的方法是将我很棒的配置文件 (rc.lua) 迁移到 moonscript and unit-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')
第一个单元测试检查我的配置是否调用模块的特定功能 'gears' 一切都相当顺利。我最终模拟了每次后续调用
的 gears 模块
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 调用,因此在全球范围内根本不可用,或者至少还没有定义其功能。
最后,这让我想到了这个问题:
为什么这甚至 运行 在你日常的 awesome 启动过程中(awful 几乎是核心模块)首先,当我试图复制环境时我错过了什么确实如此。
非常感谢您。
此致
awesome 的 C 内核导出了一些对象供 lua 使用。可怕的(和很多其他人)直接使用这些。这些在 awesome 3.5 中(参见 https://awesome.naquadah.org/doc/api/):
- 标签
- 计时器
- 绘图
- keygrabber
- 可绘制
- 根
- 鼠标
- 客户
- 屏幕
- 很棒
- 鼠标抓手
- 选择
- 关键
- dbus
- 按钮
其中大部分都有糟糕的包装器,可以添加有用的东西(例如键与 awful.key,标签、keygrabber、按钮相同)。 "the average user" 完全隐藏了其他内容(例如 drawin、drawable)。
您也应该能够模拟这些,但您必须设置同名的全局变量。
编辑:顺便说一下,这就是为什么您不能在正常的 lua 提示中 require("awful")
。缺少相同的内置对象。
我想学习一些 lua/moonscript 的方法是将我很棒的配置文件 (rc.lua) 迁移到 moonscript and unit-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')
第一个单元测试检查我的配置是否调用模块的特定功能 'gears' 一切都相当顺利。我最终模拟了每次后续调用
的 gears 模块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 调用,因此在全球范围内根本不可用,或者至少还没有定义其功能。
最后,这让我想到了这个问题:
为什么这甚至 运行 在你日常的 awesome 启动过程中(awful 几乎是核心模块)首先,当我试图复制环境时我错过了什么确实如此。
非常感谢您。
此致
awesome 的 C 内核导出了一些对象供 lua 使用。可怕的(和很多其他人)直接使用这些。这些在 awesome 3.5 中(参见 https://awesome.naquadah.org/doc/api/):
- 标签
- 计时器
- 绘图
- keygrabber
- 可绘制
- 根
- 鼠标
- 客户
- 屏幕
- 很棒
- 鼠标抓手
- 选择
- 关键
- dbus
- 按钮
其中大部分都有糟糕的包装器,可以添加有用的东西(例如键与 awful.key,标签、keygrabber、按钮相同)。 "the average user" 完全隐藏了其他内容(例如 drawin、drawable)。
您也应该能够模拟这些,但您必须设置同名的全局变量。
编辑:顺便说一下,这就是为什么您不能在正常的 lua 提示中 require("awful")
。缺少相同的内置对象。