如何为使用Git的ruby脚本编写rspec测试
我有一个Ruby脚本,用于检查git repo和url端点上的文件之间的更改。如果存在变更,则提交变更并将其推送到回购协议。我想为这个脚本编写rspec测试,但我在理解如何做时遇到了困难,因为我不希望这些测试实际将任何内容推送到实际的Git repo。我想我需要建立某种模拟存储库,但我不完全确定。任何关于如何最好地为这样一个脚本编写单元测试的建议都将不胜感激 我认为您可以利用这样一个事实,即推送到本地“裸”存储库是完全合法的,即您需要以下步骤:如何为使用Git的ruby脚本编写rspec测试,ruby,git,unit-testing,rspec,Ruby,Git,Unit Testing,Rspec,我有一个Ruby脚本,用于检查git repo和url端点上的文件之间的更改。如果存在变更,则提交变更并将其推送到回购协议。我想为这个脚本编写rspec测试,但我在理解如何做时遇到了困难,因为我不希望这些测试实际将任何内容推送到实际的Git repo。我想我需要建立某种模拟存储库,但我不完全确定。任何关于如何最好地为这样一个脚本编写单元测试的建议都将不胜感激 我认为您可以利用这样一个事实,即推送到本地“裸”存储库是完全合法的,即您需要以下步骤: 创建一个“裸”存储库repo1(即没有工作副本的存
repo1
(即没有工作副本的存储库,它完全由.git
文件夹的内容组成)repo1
克隆常规存储库repo2
repo2
中那样进行任何更改(添加、提交、推送)。检查推送是否成功repo1
中的数据是否也可用/tmp
目录中的控制台会话示例:
ruby-2.2.0 in /tmp ♥ mkdir repo1
ruby-2.2.0 in /tmp ♥ cd repo1
ruby-2.2.0 in /tmp/repo1 ♥ git init --bare
Initialized empty Git repository in /private/tmp/repo1/
ruby-2.2.0 in /tmp/repo1 ♥ cd ..
ruby-2.2.0 in /tmp ♥ git clone repo1 repo2
Cloning into 'repo2'...
warning: You appear to have cloned an empty repository.
done.
ruby-2.2.0 in /tmp ♥ cd repo2
ruby-2.2.0 in /tmp/repo2 on master ♥ git remote -v
origin /tmp/repo1 (fetch)
origin /tmp/repo1 (push)
ruby-2.2.0 in /tmp/repo2 on master ♥ cd ..
ruby-2.2.0 in /tmp ♥ cd -
/tmp/repo2
ruby-2.2.0 in /tmp/repo2 on master ♥ echo 'ohai!' >> readme.txt
ruby-2.2.0 in /tmp/repo2 on master ♥ git add readme.txt
ruby-2.2.0 in /tmp/repo2 on master ♥ git commit
[master (root-commit) 1f1fb96] First commit
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
ruby-2.2.0 in /tmp/repo2 on master ♥ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 227 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /tmp/repo1
* [new branch] master -> master
ruby-2.2.0 in /tmp/repo2 on master ♥ git log
commit 1f1fb96deaaf15fa33f1682d87d85014b59b36db
Author: Alexey Shein <alexey.shein.dev@gmail.com>
Date: Tue Sep 22 01:22:12 2015 +0500
First commit
ruby-2.2.0 in /tmp/repo2 on master ♥ cd ..
ruby-2.2.0 in /tmp ♥ cd repo1
ruby-2.2.0 in /tmp/repo1 ♥ ls
HEAD config description hooks info objects refs
ruby-2.2.0 in /tmp/repo1 ♥ git log
commit 1f1fb96deaaf15fa33f1682d87d85014b59b36db
Author: Alexey Shein <alexey.shein.dev@gmail.com>
Date: Tue Sep 22 01:22:12 2015 +0500
First commit
ruby-2.2.0 in /tmp/repo1 ♥
/tmp中的ruby-2.2.0♥ mkdir报告1
ruby-2.2.0in/tmp♥ cd报告1
ruby-2.2.0in/tmp/repo1♥ git init——裸
已在/private/tmp/repo1中初始化空Git存储库/
ruby-2.2.0in/tmp/repo1♥ 光盘
ruby-2.2.0in/tmp♥ git克隆repo1 repo2
克隆到“repo2”。。。
警告:您似乎克隆了一个空存储库。
完成。
ruby-2.2.0in/tmp♥ cd报告2
master上的ruby-2.2.0 in/tmp/repo2♥ git远程-v
来源/tmp/repo1(提取)
原点/tmp/repo1(推送)
master上的ruby-2.2.0 in/tmp/repo2♥ 光盘
ruby-2.2.0in/tmp♥ 光盘-
/tmp/2
master上的ruby-2.2.0 in/tmp/repo2♥ 回音“ohai!”>>自述文件
master上的ruby-2.2.0 in/tmp/repo2♥ git add readme.txt
master上的ruby-2.2.0 in/tmp/repo2♥ git提交
[master(root提交)1f1fb96]第一次提交
1个文件已更改,1个插入(+)
创建模式100644 readme.txt
master上的ruby-2.2.0 in/tmp/repo2♥ git推送
计数对象:3,完成。
写入对象:100%(3/3),227字节| 0字节/秒,完成。
总计3(增量0),重复使用0(增量0)
至/tmp/repo1
*[新分支]主控->主控
master上的ruby-2.2.0 in/tmp/repo2♥ 吉特日志
提交1f1fb96deaaf15fa33f1682d87d85014b59b36db
作者:Alexey Shein
日期:2015年9月22日星期二01:22:12+0500
第一次提交
master上的ruby-2.2.0 in/tmp/repo2♥ 光盘
ruby-2.2.0in/tmp♥ cd报告1
ruby-2.2.0in/tmp/repo1♥ ls
头部配置描述挂钩信息对象参考
ruby-2.2.0in/tmp/repo1♥ 吉特日志
提交1f1fb96deaaf15fa33f1682d87d85014b59b36db
作者:Alexey Shein
日期:2015年9月22日星期二01:22:12+0500
第一次提交
ruby-2.2.0in/tmp/repo1♥
您的代码如何与Git存储库交互?您是在使用gem,还是在执行
git
命令,例如exec(“git…”)
?脚本使用ruby-git-gem: