2015-07-18 3 views
1

Что я пытаюсь сделать, чтобы узнать, что lua/moonscript перенаправляет мой удивительный конфигурационный файл (rc.lua) на moonscript и unit-test несколько вещей на этом пути. Для этого я создал rc.lua требовать moonscript конфигурационного файла, как этогоЕдиничное тестирование moonscript awesome config

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 еще не пропустили первые несколько запросов, и, следовательно, они недоступны во всем мире или, по крайней мере, еще не определили его функциональность.
Который ведет меня, наконец, на вопрос:

Почему это даже бежать во время повседневного удивительного старта (ужасный довольно много модуля ядра), в первую очередь, и что я скучаю при попытке воспроизвести окружающая среда, в которой это происходит.

Спасибо вам большое заблаговременно.
Ваш по-настоящему

ответ

1

C ядро ​​awesome экспортирует некоторые объекты для использования lua. Ужасные (и многие другие) используют их напрямую. Это потрясающе 3.5 (см https://awesome.naquadah.org/doc/api/):

  • тег
  • таймер
  • drawin
  • KeyGrabber
  • вытяжке
  • корень
  • мыши
  • клиент
  • экран
  • удивительного
  • mousegrabber
  • выбор
  • ключ
  • DBus
  • кнопка

Большинство из них имеют обертки в ужасно, которые добавляют полезные вещи (например, key vs awful.key, то же самое для тега, keygrabber, button). Другие вещи полностью скрыты от «обычного пользователя» (например, drawin, drawable).

Вы также должны имитировать их, но вам нужно будет установить глобальные переменные с тем же именем.

Редактировать: кстати, вот почему вы не можете require("awful") в обычном lua promt. Те же встроенные объекты отсутствуют.

+0

Отлично, до точки ответа ... тем временем, я сам выяснил грубые части ответа, прочитав немного источников awesomes. Мой дальнейший подход, скорее всего, будет заключаться в том, чтобы все это издеваться. – ulmeyda

+0

С этой целью глобальный контекст, хранящийся в «_G», может быть изменен с помощью чего-то типа «rawset _G», «moduleToBeMocked», mockVersion », – ulmeyda