gpt4 book ai didi

ruby - 是否可以(甚至建议)在 ChefSpec 中模拟 Ruby require 语句?

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:10 24 4
gpt4 key购买 nike

在过去的几周里,我一直在编写 ChefSpec 单元测试套件,并设法用它做了很多事情,但我发现了一个让我难过的场景。我有一个 Recipe ,其中包含“aws” Recipe 的默认 Recipe ,它会依次安装 right_aws,然后继续require

但是 ChefSpec runner 似乎有问题,吐出一个 Ruby LoadError:

LoadError
---------
cannot load such file -- right_aws

Cookbook Trace:
---------------
/var/folders/0r/cg1hmpkj2nb3wh6slrg1hkhm0000gn/T/d20140612-36208-q1ecjj/cookbooks/aws/recipes/default.rb:25:in `from_file'
/var/folders/0r/cg1hmpkj2nb3wh6slrg1hkhm0000gn/T/d20140612-36208-q1ecjj/cookbooks/acmecorp-postgresql/recipes/server.rb:71:in `from_file'

Relevant File Content:
----------------------
/var/folders/0r/cg1hmpkj2nb3wh6slrg1hkhm0000gn/T/d20140612-36208-q1ecjj/cookbooks/aws/recipes/default.rb:

18: #
19:
20: chef_gem "right_aws" do
21: version node['aws']['right_aws_version']
22: action :install
23: end
24:
25>> require 'right_aws'
26:

有没有办法在我的测试中模拟 'aws' Recipe 中的 require 'right_aws' 行?推荐吗?在运行 ChefSpec 测试的系统上简单地安装 right_aws gem 是否更好?

最佳答案

您有几个选择:

  1. 您可以通过将 right_aws 直接安装在您的机器上或使用 Gemfile(如问题评论中所述)来确保它可用
  2. 您可以直接模拟对 include_recipe 的调用(如果您的测试不需要包含的配方)

    allow_any_instance_of(Chef::Recipe).to receive(:include_recipe)
    allow_any_instance_of(Chef::Recipe).to receive(:include_recipe).with('aws').and_return(true)
  3. 模拟 requires 调用本身。

    allow(Kernel).to receive(:require) 
    allow(Kernel).to receive(:require).with("right_aws").and_return(true)

如果可能的话,我会推荐#2

关于ruby - 是否可以(甚至建议)在 ChefSpec 中模拟 Ruby require 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24182465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com