我如何才能只在第一次调用时对方法进行stub,而在第二次调用中它应该按预期运行?我有以下方法:defmethoddo_stuffrescue=>MyExceptionsleeprandretryend我想在第一次调用do_stuff时引发MyException,但在第二次调用中,行为正常。我需要实现此目的以测试我的rescueblock,而不会出现无限循环。有什么办法可以实现吗? 最佳答案 您可以将block传递给将在调用stub时调用的stub。然后你可以在那里执行unstub,除了做任何你需要做的。classFoodefinit
我正在尝试找出这段代码有什么问题。即它找不到方法“stub_model”。试图为此寻找解决方案,但无论我在哪里看,我的文件似乎都很好。请看一下,也许我只是看不出一个简单的错误。非常感谢:)书籍模型在数据库中创建。我的View规范(spec/view/books_spec.rb)如下所示:require'rails_helper'describe'books/new'doit'displaysthebookform'dobook=stub_model(Book)assign(:book,book)renderexpect(rendered).tohave_selector("formla
以下代码引发错误:undefinedmethod'any_instance'forString:Classrequire'rspec'RSpec.configuredo|config|config.mock_with:rspecenddescribeStringdoit'stubs'doString.any_instance.stub(:foo).and_return(1)''.foo.shouldeq(1)endend如何将Mocks模块包含到类或对象类中? 最佳答案 any_instance最近被添加到rspec,所以你的例子现
我正在尝试测试模型方法引发错误时触发的RailsController分支。defmy_controller_method@my_object=MyObject.find(params[:id])beginresult=@my_object.my_model_method(params)rescueExceptions::CustomError=>eflash.now[:error]=e.messageredirect_tomy_object_path(@my_object)andreturnend#...restirrelevantend如何获得Miniteststub以引发此错误?i
我尝试用RSpec2测试一个类,它有一些私有(private)方法,这些方法是从一些公共(public)方法调用的。我用测试公共(public)方法@foo.should_receive(:start_training).exactly(2).times他们是否被调用以及调用频率。我的问题是,这种方法不适用于私有(private)方法。那么,有什么方法可以将@foo.send(:private_method)与should_receive结合使用吗?或者任何其他语法? 最佳答案 should_receive(:method)无论:m
虽然我的问题很简单,但我没能在这里找到答案:如何stub方法并返回参数本身(例如在执行数组操作的方法上)?像这样:interface.stub!(:get_trace).with().and_return() 最佳答案 注意:stub方法已被弃用。请看thisanswer以现代方式做到这一点。stub!可以接受一个block。block接收参数;block的返回值是stub的返回值:classInterfaceenddescribeInterfacedoit"shouldhaveastubthatreturnsitsargument
几乎我遇到的每一个规范文件我最终都会写这样的东西:before:eachdo@cimg=Factory.build:cimg_valid@cimg.stub(:validate_img).and_returntrue@cimg.stub(:validate_img_url).and_returntrue@cimg.stub(:save_images).and_returntrue@cimg.stub(:process_image).and_returntrue@cimg.stub(:img).and_returntrueend我的意思是,我从Factory.build获得的模型是完全有
很像thisquestion,我也在使用RyanBates的nifty_scaffold。它具有使用Mocha的any_instance的理想方面。在Controller后面的模型对象中强制进入“无效”状态的方法。与我链接到的问题不同,我没有使用RSpec,而是使用Test::Unit。这意味着那里的两个以RSpec为中心的解决方案对我不起作用。是否有通用的(即:与Test::Unit一起使用)删除any_instancestub的方法?我认为它导致我的测试出现错误,我想验证这一点。 最佳答案 碰巧,Mocha0.10.0允许uns
我有一个包含时间的变量foo,比如说今天下午4点,但是时区偏移量是错误的,即它处于错误的时区。如何更改时区?当我打印它时,我得到了FriJun2607:00:00UTC2009所以没有偏移量,我想将偏移量设置为-4或东部标准时间。我希望能够将偏移量设置为Time对象的一个属性,但这似乎不可用? 最佳答案 你没有明确说明你是如何获得实际变量的,但既然你提到了Time类,所以我假设你有时间使用它,我会在我的回答中提到它时区实际上是Time类的一部分(在您的情况下,时区显示为UTC)。作为Time.now响应的一部分,Time.now
我有一个模块包含在另一个模块中,它们都实现了相同的方法。我想stub包含模块的方法,如下所示:moduleMdeffoo:MendendmoduleAclass第一个测试通过,但第二个输出:Failure/Error:expect(A.foo).toeq:barexpected::bargot::M为什么stub在这种情况下不起作用?有没有不同的方法来实现这一目标?谢谢!------------------------------------更新----------------------------------谢谢!使用allow_any_instance_of(M)解决了这个问题。