我正在使用RSpec(最新版本2.12.2)来测试我正在处理的一个小型Ruby类。我的问题是,当RSpec测试失败时,测试输出看起来非常冗长,并显示了一个巨大的错误消息列表,几乎是一个完整的回溯。这意味着我必须向上滚动才能看到实际的错误消息和跟踪的顶部。我相信默认情况下RSpec应该这样做,但它似乎并没有为我做这件事。例如,如果我运行rspecspec/my_spec.rb:132(只运行一个在L132上的测试),我得到这个输出:Failure/Error:@f.has_changed?("test").shouldbe_trueexpected:truevaluegot:fals
我正在为涉及多个模型的服务对象编写Rspec测试,但我觉得我的测试过于依赖方法的内部结构,因此意义不大。这是一个例子:classMealServicerdefself.serve_meal(meal,customer)meal.update_attributes(status:"served",customer_id:customer.id)order=customer.orderOrderServicer.add_meal_to_order(meal,order)CRM.update_customer_record(customer)//externalAPIcallendend我想
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion一个包含快速介绍的二人组。简介:我从Perl转向Ruby,我对测试框架的选择有点迷茫。我知道可能没有单一的、全面的最佳选择,但我什至无法清楚地了解竞争环境。那么,首先,MiniTest还是Test::Unit?我刚刚意识到1.9.1现在默认为MiniTest。我没有注意到,因为所有旧的Test::Unit教程仍然可以正常工作。如果您需要测试/单元,您实际上会得到MiniTest作为Test
我在Rspec上做了一些测试,看起来像这样:describe"description"dobefore:eachdodo_before()endit"something_1"do...endit"something_2"do...endend我知道我可以使用获取当前测试的名称(“something_1”)example.description有什么方法可以获取before:each区域中所有描述的数组吗? 最佳答案 rspec-fd--color--dry-runfilename在rspec3.5.2中为我工作,列出所有测试而不运行
我目前正在尝试测试一种基本方法,该方法从用户那里接收一些输入(gets)并将其输出(puts)。经过一番研究后,我发现了一种测试标准输出流的好方法,如下所示:defcapture_standard_output(&block)original_stream=$stdout$stdout=mock=StringIO.newyieldmock.string.chompensure$stdout=original_streamend我正在测试的方法是下面的方法,输出和输入指的是我在开始时初始化的ivars,并指向等效的$stdout和$stdin:defask_for_markouput.p
在单元测试中,我需要测试是否正确定义了alias_method定义的别名方法。我可以简单地对用于其原件的别名使用相同的测试,但我想知道是否有更明确或更有效的解决方案。例如,有没有办法1)取消引用方法别名并返回其原始名称,2)获取并比较某种底层方法标识符或地址,或3)获取并比较方法定义?例如:classMyClassdeffoo#dosomethingendalias_method:bar,:fooenddescribeMyClassdoit"methodbarshouldbeanaliasformethodfoo"dom=MyClass.new#???identity(m.bar).s
我在测试时遇到过这个问题。假设我有两个模型,User和Post,其中userhas_many:posts。我正在尝试指定包含如下内容的代码块:user=User.find(123)post=user.posts.find(456)我知道如何模拟User.find和user.posts部分。user.posts模拟返回一个Post对象数组。当它到达.find(456)部分时,一切都崩溃了,并出现noblockgiven异常。所以我的问题是:作为user.postsmock的结果我要返回什么,以便.find(456)方法对其起作用?User.first.posts.class说它是Arra
我想要一个返回true/false的单行代码,它测试数组中的每个元素是否为整数。因此,如果数组中的任何元素不是Integer,它应该返回false,否则返回true。这是我的尝试:>>([2,1,4].map{|x|(x.is_a?Integer)}).reduce{|x,result|xandresult}=>true>>([2,"a",4].map{|x|(x.is_a?Integer)}).reduce{|x,result|xandresult}=>false还有其他进一步提炼它的想法吗? 最佳答案 array.all?{|x
我有一个看起来像这样的ActiveRecord类。classFoobelongs_to:bar,autosave:truebefore_save:modify_bar...end如果我做一些日志记录,我看到bar正在被修改,但它的更改没有保存。怎么了? 最佳答案 这里的问题是autosave:true只是简单地设置了一个普通的before_save回调,而before_save回调是按照它们的顺序运行的'已创建。**因此,它尝试保存没有变化的bar,然后它调用modify_bar。解决方案是确保modify_bar回调在自动保存之前
我正在尝试为我的Controller编写测试,该Controller接收来自外部服务的请求。到目前为止,这是我的测试:describeApplyControllerdocontext'whenvalid'dolet(:parameters)dofile=File.joinFile.dirname(__FILE__),'..','samples','Indeed.json'JSON.parse(File.readfile)endlet(:signature){'GC02UVj0d4bqa5peNFHdPQAZ2BI='}subject(:response){post:indeed,par