Я знаю, что опаздываю на вечеринку с этим, но для будущих гуглеров ...
Я думаю, что лучшее решение этой проблемы дано здесь
. Ранее принятый ответ - тестирование самого почтовика (внутри спецификации контроллера). Все, что вам следует здесь проверить, - это то, что Mailer получит указание доставить что-то с правильными параметрами.
Затем вы можете проверить Mailer в другом месте, чтобы убедиться, что он правильно реагирует на эти параметры.
ReservationMailer.should_receive (: verify_email) .with (an_instance_of (Reservation))
Прежде чем использовать диалоги графического интерфейса пользователя, подумайте об использовании подсказок консоли. Довольно часто можно обойтись простым "т / п?" подсказки, которые в bash достигаются с помощью команды read
..
read -p "Do something? ";
if [ $REPLY == "y" ]; then
echo yay;
fi
Если приглашение консоли просто не помогает, Zenity действительно прост в использовании , например:
zenity --error --text="Testing..."
zenity --question --text="Continue?"
Это работает только в Linux / Gnome (или, скорее, оно будет установлено только по умолчанию в таких системах). Метод read
будет работать практически на любой платформе (включая безголовые машины или через SSH)
Если вам нужно что-то более сложное, чем то, что предоставляет read или Zenity, «переход на C ++» действительно лучший метод (хотя я бы рекомендовал Python / Ruby вместо C ++ для таких задач по замене сценария оболочки)
Я хочу сделать простой интерфейс для какой-то странной игры, индикатор выполнения для здоровья или что-то в этом роде - это пример того, что я хочу. Переменная «ЗДОРОВЬЕ» равна 34, поэтому заполните индикатор выполнения до 34/100
В качестве сценария командной строки он будет использовать Python:
$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************
Или для нормализации значений от 1 до 78 (чтобы вы не получить перенос строк при стандартном размере терминала):
$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"
Zenity также имеет Диалог прогресса ,
#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="Update System Logs" \
--text="Scanning mail logs..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Update canceled."
fi
Как я уже говорил, если Zenity не может делать то, что вам нужно, попробуйте написать свою игру как «правильный» сценарий в Python / Ruby / Perl / C ++ / и т. д., поскольку это звучит так, будто вы раздвигаете границы того, что может делать сценарий оболочки ..
есть команда под названием dialog
, который использует библиотеку ncurses. « Dialog - это программа, которая позволит вам задавать различные вопросы или отображать сообщения с помощью диалоговых окон из сценария оболочки. Реализованы эти типы диалоговых окон (хотя не все обязательно скомпилированы в диалог) »
Если вы хотите написать графический интерфейс в bash zenity - лучший способ. Вот что вы можете с ним сделать:
Application Options:
--calendar Display calendar dialog
--entry Display text entry dialog
--error Display error dialog
--info Display info dialog
--file-selection Display file selection dialog
--list Display list dialog
--notification Display notification
--progress Display progress indication dialog
--question Display question dialog
--warning Display warning dialog
--scale Display scale dialog
--text-info Display text information dialog
Комбинируя эти виджеты, вы можете создавать довольно удобные графические интерфейсы. Конечно, он не такой гибкий, как набор инструментов, интегрированный в язык программирования, но в некоторых случаях действительно полезен.
Вы можете использовать диалог , который основан на ncurses или whiptail , который основан на сленге ]. 120] Я думаю, что у обоих есть привязки GTK или Tcl / Tk.
Что ж, если вы можете использовать Tcl / Tk в своей среде, вам, вероятно, следует написать сценарий TCL и использовать его. Вы также можете посмотреть желание .
Для этого вы можете gtk-server . Gtk-server - это программа, которая работает в фоновом режиме и предоставляет текстовый интерфейс, позволяющий другим программам (включая сценарии bash) управлять им. В нем есть примеры для Bash ( http://www.gtk-server.org/demo-ipc.bash.txt , http://www.gtk-server.org/demo-fifo .bash.txt )
Если у вас установлен Qt / KDE, вы можете использовать kdialog , который открывает диалоговое окно Qt. Вы можете легко указать отображение диалогового окна Да / Нет, ОК / Отмена, простого ввода текста, ввода пароля и т. Д. После этого у вас будет доступ к возвращаемым значениям из этих диалоговых окон в оболочке.
Очевидно, кто-то написал интерфейс bash для GTK +. Я не уверен, что вы сможете легко заставить его работать, но, возможно, стоит попробовать. Вы можете найти ее здесь:
Пожалуйста, загляните в мою библиотеку: http://sites.google.com/site/easybashgui
Она предназначена для обработки, с одним и тем же набором команд, безразлично всех четырех больших инструментов "kdialog", "Xdialog", "cdialog" и "zenity", в зависимости от того, запущен X или нет, если D.E. - KDE или Gnome или другой. Есть 15 различных функций (среди них две под названием "progress" и "adjust")...
Пока :-)