首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为逻辑编写rspec和编写模拟STDIN

如何为逻辑编写rspec和编写模拟STDIN
EN

Stack Overflow用户
提问于 2019-06-26 05:08:44
回答 1查看 119关注 0票数 2

我是一个非常新的程序员,正在尝试为测试条件语句/逻辑的类编写rspec。我开始为它编写sudo代码,但我被告知要做模拟STDIN,但我不知道怎么做。有人可以写的rspec的类或给我一些想法如何创建一个模拟STDIN。我需要为条件语句/逻辑编写rspec的帮助,如果有人可以只为一个上下文编写测试,那么我可以在此基础上进行rest。

代码语言:javascript
运行
AI代码解释
复制
require 'rails_helper'

module BAB::ACA

 RSpec.describe partfinder do

    describe '#find_part_id' do
      let(:face) { create(:face) }

      subject { described_class.find_part_id(face) }

      context 'When bab con already exists' do
        context 'when there are more than one part ids' do
          #create part ids 

        context 'when user input matches an existing id' do 
          #mock STDIN that matches an existing, subject should equal that id 
        end 

        context 'when user input does not match an existing id' do
          # mock STDIN that does match existing id, should return failure message
        end 
       end 

        context 'when there is only one bab part id' do
          # subject should equal the one that already exists
        end
       end 

        context 'when av con does not yet exist' do
          # mock STDIN and make sure subject equals what you mocked
        end
      end 
end

module BAB::ACA

    class partfinder

      def self.find_part_id(face)
        av_con = BAB::Child:Fail.find_by(
                  face: face
                  reg: BAB:Child.find_reg
                )
        if av_con
          look_id(face, av_con)
        end
        else
          puts "What is #{face.name} BAB part id? must be 6"
          STDIN.gets.chomp
        end
      end

      def self.look_id(face, av_con)
        if av_con.part_ids.length > 1
          ask_for_id(face, av_con)
        else
        av.con.part_ids.first
        end
      end

      def self.ask_for_id(face, av_con)
        puts "What is #{face.name} BAB part id? "
        bab_part_id = STDIN.gets.chomp

        unless av.con.part_ids.include?(bab_part_id)
          fail 'Entered id doesn't match'
        end
        bab_part_id
      end
    end
end
EN

回答 1

Stack Overflow用户

发布于 2019-06-26 06:30:43

您可以使用method stubs

在本例中,您想要存根STDIN.gets.chomp,因此可以执行如下操作:

代码语言:javascript
运行
AI代码解释
复制
describe '#find_part_id' do
  before do
    allow(STDIN.gets).to receive(:chomp).and_return(stdin_input)
  end

  let(:stdin_input) { 'user input from stdin' }
  let(:face) { create(:face) }

  subject { described_class.find_part_id(face) }

  context 'When bab con already exists' do
    context 'when there are more than one part ids' do
      it 'some test' do
        # your test here
      end
    end

    # more contexts...

    context 'a context that needs a different stdin_input' do 
      let(:stdin_input) { 'some different user input from stdin' }

      it 'another test' do
        # your test here
      end
    end
  end
end

其中stdin_input是您希望用户为您的测试输入的字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56765567

复制
相关文章
手写编程语言-如何为 GScript 编写标准库
这是一个可以在线运行 GScript 脚本的网站,其本质原理是接收用户的输入源码从而在服务器上运行的服务;这简直就是后门大开的 XSS 攻击,为保住服务器我设置了运行 API 的后端服务的用户权限,这样可以避免执行一些恶意的请求。
crossoverJie
2022/12/20
4900
手写编程语言-如何为 GScript 编写标准库
pycharm怎样编写java_Pycharm改进和编写代码[通俗易懂]
PyCharm包含用于编写代码的各种标准,其中包含适用于Python的适当缩进。 这有助于提高代码标准并在PyCharm编辑器中编写完整的代码。
全栈程序员站长
2022/09/27
1.5K0
pycharm怎样编写java_Pycharm改进和编写代码[通俗易懂]
C# dotnet 编写 curl 的用户名和密码逻辑
在使用 curl 时,可以采用 -u 加上用户名和密码,这个对应在 C# 里面也是两句话的事情。只是在 curl 里面封装好了,我通过工具人协助解决,于是就在这里记录一下
林德熙
2021/01/21
1.2K0
编写api
自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。
用户8442333
2021/05/25
5320
dockerfile编写
Dockerfile是一种用于定义Docker镜像构建过程的文本文件。它包含了一系列指令和参数,用于指导Docker引擎在一个空白的操作系统中构建一个Docker镜像。Dockerfile可以使用各种操作系统和编程语言来编写,并且可以包含几乎所有操作系统和软件配置,以及应用程序代码、文件和依赖项。
堕落飞鸟
2023/03/26
8230
CmakeList的编写和参数详解
在linux 下进行开发很多人选择编写makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量很大,搞的人头很大。采用自动化的项目构建工具cmake 可以将程序员从复杂的makefile 文件中解脱出来。cmake 根据内置的规则和语法来自动生成相关的makefile 文件进行编译,同时还支持静态库和动态库的构建,我把工作中用到的东东总结在此,方便忘记时随时查看,具体cmake的介绍和详细语法还是参考官方文档(http://www.cmake.org/),有一篇中文的cmake 实践 写的不错,可以google一下。
全栈程序员站长
2022/11/15
2.2K0
守护进程编写标准和实现
Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。类似于Windows下的服务程序。通常的 linux 程序在我们通过终端运行挂起后,再关闭终端,这些程序的运行进程也会随着终端一起关闭,这是因为他们属于同一会话。如果不想程序随着终端关闭而关闭,那么就要让程序脱离终端的会话组,那么就需要使用到setsid()函数了。一个正确的守护进程编写过程如下:
我与梦想有个约会
2023/10/20
2980
守护进程编写标准和实现
ScrapeKit 和 Swift 编写程序
以下是一个使用 ScrapeKit 和 Swift 编写的爬虫程序,用于爬取 图片。同时,我们使用了proxy 这段代码来获取代理。
华科云商小孙
2023/10/23
1680
【SpringBoot】Service和Dao的编写
效果图 配置环境 创建数据库 数据库中文编码 建表 create table `student` ( `id` int(11) Not NULL AUTO_INCREMENT COMMENT
瑞新
2020/12/07
1.2K0
【SpringBoot】Service和Dao的编写
创建、编写和阅读MIME邮件
Iris提供了一个可以用于创建MultiPart Mime消息(%Net.MimePart)的类。创建要添加到SOAP消息的附件时,请使用此类;请参阅创建Web服务和Web客户端。因为MIME是一个常见的标准,所以有许多其他可能的应用程序,例如电子邮件处理和HTTP Multipart Post。
用户7741497
2022/07/04
1.1K0
编写ORM
在一个Web App中,所有数据,包括用户信息、发布的日志、评论等,都存储在数据库中。在awesome-python3-webapp中,我们选择MySQL作为数据库。
用户8442333
2021/05/25
6650
编写Model
在编写ORM时,给一个Field增加一个default参数可以让ORM自己填入缺省值,非常方便。并且,缺省值可以作为函数对象传入,在调用save()时自动计算。
用户8442333
2021/05/25
5000
编写MVC
现在,ORM框架、Web框架和配置都已就绪,我们可以开始编写一个最简单的MVC,把它们全部启动起来。
用户8442333
2021/05/25
9850
不要使用短路逻辑编写 stl sorter 多条件比较
最近工期紧、任务多,没有时间更新博客,就水一期吧。虽然是水,也不能太水,刚好最近工作中遇到一个 sorter 多条件排序的问题,花费了半天时间来定位解决,就说说它吧。
海海
2022/08/31
2970
如何为 Win32 的打开和保存对话框编写文件过滤器(Filter)
在使用 Win32 / WPF / Windows Forms 的打开或保存文件对话框的时候,多数情况下我们都会考虑编写文件过滤器。UWP 中有 FileTypeFilter 集合可以添加不同的文件种类,但 Win32 中却是一个按一定规则组合而成的字符串。
walterlv
2023/10/22
2670
如何为 Win32 的打开和保存对话框编写文件过滤器(Filter)
从嵌套结构中取值时如何编写兜底逻辑
对a解构时赋予的默认值(空数组),仅当b.a的值为undefined时才会生效,如果b.a的值为null,默认值就无法生效,使得第二行调用map方法的代码直接报错,所以第一行代码兜底并没有做好。
大史不说话
2020/11/03
2.9K0
Shell脚本编写思路和实例讲解
1.理清思路:在我们想实现一个功能需要写脚本的时候是切忌不要想到就写,避免需要什么功能就先写个什么命令再去完善,这种写法常常会出现在结构上很难调整的问题。在我们开始写脚本之前一定要事先理清楚要怎么去实现这个功能,包括用什么命令和命令的先后顺序。
HACK学习
2019/08/07
1.1K0
漏洞验证和利用代码编写指南
有朋友问我近段日子做了些什么工作,作为安全研究员或者漏洞分析者最基础的工作之一,最近写了不少漏洞验证和利用的POC&EXP。所以就想结合下自己的经验和体会,分享下正确编写漏洞验证和漏洞利用代码的一些心得以及编写代码时需要避免的一些常见错误。
信安之路
2019/12/12
1.7K0
使用Perl和WWW::Mechanize库编写
以下是一个使用Perl和WWW::Mechanize库编写的网络爬虫程序的内容。代码必须使用以下代码:jshk.com.cn/get_proxy
用户614136809
2023/10/20
1420
Python标准库和类编写风格
正如你看到的,在组织大型项目代码方面,Python提供了很多选项,熟悉所有这些选项很重要,这样你才能确定哪种项目是最佳的,并能理解别人开发的项目。开始应让代码结构尽可能简单,尽可能现在一个文件中完成所有的工作,确定一切都能正常运行后,再将类移到独立的模块中。如果你喜欢模块和文件的交互方式,可在项目开始就尝试将类存储到模块中。先找出让你能够编写出可行代码的方式,再尝试让代码更为组织有序。
狼啸风云
2019/01/18
8860

相似问题

编写模拟RSpec

11

如何为API编写Rspec

11

如何为方法编写rspec

15

如何为rails作业编写rspec

22

如何为模型方法编写rspec?

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文