草庐IT

ruby - 一个 stub 和_raise 异常怎么可能只有一次?

我知道有一种方法可以让stub像这样返回多个不同的值:subject.stub(:method_call.and_return(1,2,3)但我希望这样的事情是可能的:subject.stub(:method_call).and_raise(Exception).oncesubject.stub(:method_call).and_return(1)但我还没有找到一种优雅的方式让stub仅在第一次调用时引发异常。有什么建议吗? 最佳答案 我知道的唯一方法是使用这样的计数器变量:counter=0times=2TestModel.an

ruby-on-rails - 在 rspec 中 stub 类级别常量

我的类(class)结构如下:classAbcONE_CLASS_LEVEL_CONSTANT_BEING_READ_FROM_DB=GloablAttributeValue.read_from_dbdefsome_method_that_use_above_constant#thisfunctionbehavesdifferentlyfordifferentvaluesofONE_CLASS_LEVEL_CONSTANT_BEING_READ_FROM_DBendend现在我想根据不同的值ONE_CLASS_LEVEL_CONSTANT_BEING_READ_FROM_DB对some

ruby-on-rails - 返回值的 RSpec 序列和从 stub 中引发的错误

我想在引发异常的情况下对HTTParty的前两次调用stub,然后,第三次调用应该返回值。beforedoallow(HTTParty).toreceive(:get).exactly(2).times.with(url).and_raise(HTTParty::Error)allow(HTTParty).toreceive(:get).with(url).and_return('{}')end但一个允许覆盖另一个。如何设置stub以在前几次尝试时引发错误,然后让它返回一个值? 最佳答案 根据thisgithubissue中提供的信

ruby-on-rails - 有没有办法撤消任何实例的摩卡 stub ?

在我的Controller规范中,我stub有效?对于一些路由测试,(基于RyanBatesnifty_scaffold)如下:-it"createactionshouldrendernewtemplatewhenmodelisinvalid"doCompany.any_instance.stubs(:valid?).returns(false)post:createresponse.shouldrender_template(:new)end当我单独测试Controller时,这很好。我的模型规范中也有以下内容it"isvalidwithvalidattributes"do@comp

ruby-on-rails - 在使用 WebMock 时遇到问题,没有正确 stub

Ruby1.9.3、RSpec2.13.0、WebMock1.17.4、Rails3我正在为公司应用程序编写测试。有问题的Controller显示客户调用的电话表,并允许排序/过滤选项。编辑测试失败,因为在我当前的设置中,路径没有呈现,因为recorder_server没有在本地运行,或者没有正确设置。也请帮忙解决这个问题。AErrno::ECONNREFUSEDoccurredinrecordings#index:Connectionrefused-connect(2)/usr/local/lib/ruby/1.9.1/net/http.rb:763:in`initialize'--

ruby - RSpec - 无法 stub 类私有(private)方法

我正在尝试使用RSpec3消除对某些JSON发出外部请求的方法。我之前通过将其放入spec_helper.rb文件中来让它工作,但现在我重构了并将该方法移动到它自己的类中,stub不再有效。RSpec.configuredo|config|config.beforedoallow(Module::Klass).toreceive(:request_url)doJSON.parse(File.read(File.expand_path('spec/fixtures/example_data.json')))endendend类看起来像这样moduleModuleclassKlass#pu

ruby-on-rails - 直接在模型上调用 rspec 会导致 stub 错误!方法

运行时:rakespec:models一切正常,但当我这样做的时候rspecspec/models/spot_spec.rb有Spot.stub!:test1,我得到:undefinedmethod`stub!'forSpot:Class错误仅在我包含该stub时发生!行。有什么办法可以避免吗?我只想运行特定型号的规范。更新:使用Ruby1.9.2和RSpec2.4.0,这里是spot_spec.rb代码:requireFile.expand_path(File.dirname(__FILE__)+'/../spec_helper')describeSpotdobefore(:all)

ruby - 我可以使用 rspec 模拟来 stub 版本常量吗?

我的代码只需要在特定版本的ActiveRecord上运行(解决旧AR库上的错误的方法)。此代码测试ActiveRecord::VERSION常量的值以查看它是否需要运行。有没有办法在rspec中模拟这些常量,这样我就可以测试该代码路径,而无需在测试机器上安装正确的ActiveRecordgem? 最佳答案 我最终编写了一个辅助方法来让我在执行代码块时覆盖常量:defwith_constants(constants,&block)constants.eachdo|constant,val|Object.const_set(consta

ruby - Rspec:访问 Klass.any_instance.stub block 内的实例

Feature:testrandomnessInordertomakesomecodetestableAsadeveloperIwantArray#sampletobecomeArray#first如果可以访问Klass.any_instance.stubblock中的实例,那将是可能的。像这样:Array.any_instance.stub(:sample){instance.first}但是那个afaik是不可能的。无论如何,场景需要! 最佳答案 我找到了一个hacky解决方案,我已经在rspec版本2.13.1和2.14.4上

ruby - 有什么方法可以验证模拟或 stub 是否有效?

假设我有一个用以下伪代码定义的类和方法classBookdefquick_inforeturntitle+""+authorendend如果我正在为某个使用此Book类的other类编写单元测试,我会为Book的方法调用创建一个stub。快速信息。现在我认为,如果我的Book类发生变化,例如,如果quick_info方法重命名为short_description,就会出现问题。我的单元测试仍将使用quick_info,看起来我的测试通过得很好,但实际上它应该失败。我想知道是否可以运行一些东西来验证我测试中的stub/模拟是否确实由正确的类和方法组成。也许像这样的东西可以在持续集成服务器