1

我想编写一个单元测试来检查我的项目中的 Gemfile.lock 是否与 Gemfile 匹配,以防我bundle在提交之前忘记调用。

是否有bundle命令(或其他方法)选项来检查这个?

注意bundle check不适合这个目的。它会检查 Gemfile 中的所有 gem 是否都安装在本地系统上,但不会检查 Gemfile.lock。因此,bundle install --deployment即使bundle check在开发机器或 CI 中成功,服务器上的命令也会失败。

4

3 回答 3

3

使用bundle check命令

Check 在本地机器上搜索 Gemfile 中请求的每个 gem。如果找到所有 gem,Bundler 会打印一条成功消息并以状态 0 退出。如果没有,则会列出第一个丢失的 gem,并且 Bundler 退出状态 1。

于 2013-05-03T11:42:44.343 回答
3

尝试:

cp Gemfile.lock Gemfile.lock.orig
bundle install
diff Gemfile.lock Gemfile.lock.orig && echo "Gemfile.lock matches Gemfile"
于 2013-05-03T14:20:47.457 回答
0

Gemfile 通常与 Gemfile.lock 不匹配,因为 bunder 将解析 Gem 的所有依赖项并将它们以树的方式放置在 Gem 的名称下。此外,Gemfile.lock 的目的只是为了解决版本号和其他依赖关系,以防 Bunder 在安装包时发现许多兼容的 gem 时可能出现的任何冲突。

当你执行 bundle update 命令时,Gemfile.lock 会被移除,并且会生成一个新的 Gemfile.lock 并带有新的依赖...

于 2013-05-03T11:43:48.373 回答