RSpec:重新打开类时存根 Rails.application.config 值不起作用?

2024-06-25

我在应用程序配置中定义了一个选项。我想要测试的类是在 gem 中定义的(不是我编写的)。我想重新开课:

Myclass.class_eval do

   if Rails.application.config.myoption=='value1'
      # some code
      def self.method1
      end
   else 
       # another code
      def self.method2
      end
   end
end

我想使用 RSpec 3 测试此代码:

# myclass_spec.rb

require "rails_helper"

RSpec.describe "My class" do
  allow(Rails.application.config).to receive(:myoption).and_return('value1')

  context 'in taxon' do

  it 'something' do
    expect(Myclass).to respond_to(:method1)
  end

  end
end

如何在运行重新打开类的代码之前存根应用程序配置值。


哇,这已经存在很长时间了,但就我而言,我所做的是:

allow(Rails.configuration.your_config)
  .to receive(:[])
  .with(:your_key)
  .and_return('your desired return')

规格传递和配置值stubed正确。 =)

现在,另一件事是关于你的实现,我认为如果你定义了两个方法并在内部定义会更好run或者你决定执行哪一个。像这样的东西:

class YourClass
  extend self

  def run
    Rails.application.config[:your_option] == 'value' ? first_method : second_method
  end

  def first_method
    # some code
  end

  def second_method
    # another code
  end
end

希望这可以帮助。

编辑:哦,是的,我的错,我的答案是基于此one https://stackoverflow.com/a/11096074/2913037.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSpec:重新打开类时存根 Rails.application.config 值不起作用? 的相关文章

  • 如何向 ActiveRecord 集合添加方法?

    我想为特定模型的所有集合添加一个方法 假设我想添加方法my complicated averaging method到 WeatherData 集合 WeatherData all limit 3 my complicated averag
  • Twitter Bootstrap Modal 无法在 Rails 中工作

    我还很新Rails and to twitter bootstrap 我正在研究模态 但我收到了 NoMethodError 未定义的方法 渲染 当我删除 代码来自my release js erb页面 它消失但没有窗口出现 另外 还有错误
  • ActiveRecord 和关联排序

    我有一个像这样的简单 AR 关联 Question has many answers Answer belongs to question with question id int 11 NOT NULL is accepted tinyi
  • Rails:has_many:通过还是has_many_and_belongs_to?

    我有一个应用程序 我想通过另一个模型将一个模型的实例链接到同一模型的另一个实例 即 Task1 gt Relationship 基本上 关系模型将具有额外的信息 关系类型 滞后 因此将其作为连接模型是理想的 然而 并没有两个模型可以加入 只
  • 加载新的 Turbo Frame 时如何执行 JavaScript

    我在 Rails 应用程序中使用 Turbo Frames 并且在每个页面上都有
  • 后端验证轨

    如何验证文本列不包含网站 示例可以是 www google com google com http gooogle com http www google com https www google com https google com
  • ActiveRecord::Enum - PG::InvalidTextRepresentation:错误:整数输入语法无效:

    我遇到了一个奇怪的错误 希望有人能指出我正确的方向 我有一个名为 组织 的模型和一个名为 组织 的属性department 请参阅下面的架构摘录 t integer department default 0 在我的模型内部已经定义了这个属性
  • gitignore 中的文件

    我在生产服务器中有一个带有 Rails 应用程序的存储库 在存储库中有 gitignore 文件 config database yaml 每个开发客户端都有一个具有不同 config database yaml 的克隆存储库 我的问题是这
  • 将 YAML 文件作为常量加载到 Rails 控制器中是否有效?

    我有几个大型数组需要可用于特定视图 目前 我将它们存储在 YAML 文件中并加载到控制器常量中 如下所示 我假设当 Rails 在环境设置期间加载文件时 这个常量存储在内存中 但我偏执地想知道每次访问该控制器时是否都在访问文件系统 谁能建议
  • Rails 4:Solr 抛出 JavaMissing 错误,但已安装 Java

    我重新启动了 Rails 4 VPS Solr 显然也关闭了 我现在正在尝试启动 Solr 但是当我运行以下命令时RAILS ENV production bundle exec rake sunspot solr start我收到以下错误
  • Rails 4 生产环境中资产出现 404 not found 错误

    我是java环境中的rails新手 我对轨道 3 到轨道 4 的资产管道几乎没有什么困惑 目前我使用的是 Rails 4 2 5 我在本地环境中创建了一个示例应用程序 我从 app assets javascripts 内部创建了一个新的
  • 如何在 Rails 中为不在模型文件夹根目录中的模型定义工厂女孩?

    我想为我的服务器中的模型创建一个工厂女孩 该模型位于模型文件夹的文件夹内 我的树视图如下所示 app models xxx user rb spec factories xxx user rb 我的工厂女工长这样 FactoryGirl d
  • 使用 nginx 运行水豚

    是否可以使用 nginx 和乘客来运行水豚 而是 webrick Capybara 与 Cucumber 一起安装在 Rails 应用程序中 这很简单 你唯一要做的就是改变你的想法 水豚和黄瓜都不受本地环境的束缚 你可以测试位于互联网上的应
  • 通过 Devise 将 Discourse SSO 与现有 Rails 站点相结合

    我有一个现有的 Rails 应用程序 它使用 devise 作为用户身份验证 我添加了一个话语论坛 http www discourse org一切都很顺利 它驻留在子域上 我已阅读该帖子https meta discourse org t
  • 延迟作业排除队列

    我有一个延迟的作业队列 其中包含运行速度特别慢的任务 我希望由自己的一组专用工作人员来处理这些任务 因此它会阻碍其余工作人员管道的风险较小 RAILS ENV production script delayed job queue supe
  • 在控制器中调用模型方法

    我在这里遇到了一些困难 我无法成功调用属于ProjectPage model in the ProjectPage 控制器 我在我的ProjectPage控制器 def index searches Project published fi
  • 运行 cron 作业“require”时出错:无法加载此类文件——bundler/setup (LoadError)

    我已经使用 Capistrano 3 部署了应用程序 我不断收到以下错误 require cannot load such file bundler setup LoadError 这是 cron 选项卡列表 PATH home deplo
  • 使用 Remotipart 的 Rails AJAX 上传表单

    我一直在绞尽脑汁地试图让 AJAX 上传表单正常工作 我正在使用 Rails 3 2 我放gem remotipart gt 1 0 在我的 Gemfile 中 运行bundle install并且安装成功 我之前有这个非ajax上传表单
  • 更改设备消息“电子邮件已被占用”

    我在 ruby on Rails 应用程序中使用 devise gem 用户注册时 如果电子邮件已存在 则会出现默认消息 电子邮件已被占用 我已经在 en yml 中更改了此消息 activerecord errors messages t
  • Rails:哪个是首选的 Mailchimp gem? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在 Rails 中使用 Mailchimp API 的首选 gem 或插件是什么 这里有一个列表 但我

随机推荐

  • 在 React Native 中迭代 JSON

    我在本机反应中遇到了一个问题 我已经解析了一个大型 JSON 对象 并且需要迭代嵌套在其中的数组 我需要做的就是在每个项目对象中打印 day 0 的三个值 我的代码 import React Component PropTypes from
  • .htaccess 301 将所有 https 重定向到 http(一页除外)

    这是我当前在 htaccess 文件中的代码 Options FollowSymLinks RewriteEngine on RewriteBase RewriteCond HTTP HOST example com NC RewriteR
  • 更改 xml 选择器中可绘制对象的色调

    我有一个按钮 其背景在 xml 中定义 我想根据按钮当前的状态 即按下 聚焦 正常 对按钮进行着色 下面是我的 xml 文件 还有 我的colored tint dark and colored tint都是我试图在从资源文件夹中调用的可绘
  • 如何在 Android 中创建弹出视图,例如 Facebook 评论?

    我想知道是否有人知道如何创建类似 Facebook 的弹出窗口视图 例如在 Facebook Android 应用程序中用于评论 这就是我的意思 除了可以拖动以关闭它的手柄之外 它是本机 Android UI 控件还是 Facebook 自
  • 选择 PySpark 数据框中的列

    我正在寻找一种在 PySpark 中选择数据帧列的方法 对于第一行 我知道我可以使用df first 但不确定列是否存在没有列名 我有 5 列 想循环浏览每一列 1 2 3 4 5 6 7 1 0 0 0 0 0 0 1 0 0 0 0 0
  • 从该函数内部确定函数名称(不使用回溯)

    在Python中 不使用traceback模块 有没有办法从该函数内确定该函数的名称 假设我有一个模块foo有一个函数bar 执行时foo bar 有没有办法bar知道bar的名字 或者更好的是 foo bar s name foo py
  • 使用 rxjs 来限制回调

    我正在使用一个 API 在其中注册一个经常发生的回调 function myCallback event do things with event something computationally intensive const some
  • 在 google chrome 上选择网络摄像头

    当您有多个网络摄像头时 您可以在 chrome 上选择网络摄像头 设置 gt 内容 gt 媒体 但是 我想从脚本中选择相机 如何通过 Html5 或 javascript 选择相机 Check 这是巨大的代码 所以我没有将其粘贴到这里 这是
  • 在 JQGrid 中创建链接

    我需要在 JQgrid 中创建一个列的所有单元格 一个链接 该链接使用单元格值调用 javascript 函数 以传递给服务器端的某些查询 我见过jqGrid 中的 html 链接列 https stackoverflow com ques
  • C# Console.Writeline 和 .Write 差异

    我刚刚开始学习 C 有人向我指出 Microsoft 自己的开发网站提供绝对的初学者教程 以便我可以开始学习正确的语法 然而 在第一个教程挑战中 他们希望你打印控制台 This is the first line This is the s
  • 非常简单的自定义标签库功能不起作用

    我正在绞尽脑汁为什么我的自定义 taglib 函数不起作用 该示例正在使用Math cos and Math sin 这是课程 package foo tags public class Math public java lang Doub
  • 范围输入拇指随着时间的推移而偏移

    我查遍了 Stackoverflow 似乎所有带有拇指标签的范围滑块都有这个问题 例如 这个答案 https stackoverflow com a 35419875几乎没有 但仍然有 基本上你可以计算value max得到left范围值标
  • 自定义标记在某些设备上不显示(Google 地图 Android SDK)

    我在 Android 应用程序上使用自定义标记运行 Google Maps SDK 在我们的测试手机 S3 S5 和 DROID 上一切正常 但是 当我在 Nexus 5 硬件上运行该应用程序时 一种类型的自定义标记不再显示在地图上 虽然标
  • Microsoft Visual Studio 10.0\VC\include\io.h 提供了什么?

    我安装了 Visual Studio 2010 它给了我 C 编译器 C Program Files x86 Microsoft Visual Studio 10 0 VC vcvarsall bat 然而 当我尝试构建一个应用程序 一个P
  • AVR C++ uint32_t 奇怪的行为

    uint32 t a 65536 uint32 t b 1 lt lt 16 Why is a b在这里 但是 uint32 t a 65536 uint32 t b 65536 here a b尽管技术上应该是相同的 我使用 CLion
  • Play 框架使用复选框提交布尔值?

    使用 Play 2 3 x 我试图了解如何在表单中处理复选框 这个问题 https stackoverflow com questions 9499279 play framework checkbox processing对于旧版本的 P
  • 从 GCM/FCM 的生产证书添加 SHA-1

    我有一个使用 FCM 的应用程序 我已将程序包添加到 FCM 它显示 调试签名证书 SHA 1 可选 因此一切按预期工作 现在我正在准备发布 想知道我是否需要将此 SHA 1 证书更改为发布证书中的值 或者它不是必需的 并且在发布时我应该保
  • 未调用NotificationServiceExtension

    iOS 10发布后 我使用NotificationServiceExtension用于图像通知 效果很好 但最近我发现有些不对劲 UNNotificationServiceExtension 中的代码不再调用 我不确定原因 所以我创建了一个
  • JavaFx 无法正确渲染

    我的代码由两个类组成 一是 MainGUI java 二是 Screen java 我打算为不同的屏幕创建不同的类并在需要时渲染它们 这是我当前的代码MainGUI java import javafx application Applic
  • RSpec:重新打开类时存根 Rails.application.config 值不起作用?

    我在应用程序配置中定义了一个选项 我想要测试的类是在 gem 中定义的 不是我编写的 我想重新开课 Myclass class eval do if Rails application config myoption value1 some