我想编写一个单元测试来检查我的项目中的Gemfile.lock是否与Gemfile匹配,以防我在提交之前忘记调用bundle
。
bundle
命令(或其他方法)是否有选项可以检查?
请注意bundle check
不适合此目的。它检查Gemfile中的所有gem是否都安装在本地系统上,但它不检查Gemfile.lock。因此,即使bundle install --deployment
在开发计算机或CI中成功,服务器上的bundle check
命令也会失败。
答案 0 :(得分:3)
使用bundle check
命令
检查在本地计算机上搜索所请求的每个宝石 的Gemfile。如果找到所有宝石,Bundler会打印成功消息 退出状态为0.如果不是,则列出第一个缺失的宝石 Bundler退出状态1。
答案 1 :(得分:3)
尝试:
cp Gemfile.lock Gemfile.lock.orig
bundle install
diff Gemfile.lock Gemfile.lock.orig && echo "Gemfile.lock matches Gemfile"
答案 2 :(得分:0)
Gemfile通常与Gemfile.lock becoz匹配,Bunder将解析Gem的所有依赖项,并将它们以树形方式置于Gem的名称下。此外,Gemfile.lock的目的只是解决版本号和其他依赖关系,以防在Bunder在bundle安装期间发现许多兼容的gems时可能出现的任何冲突。
执行bundle update命令时,将删除Gemfile.lock并生成一个带有新依赖项的新Gemfile.lock ...