草庐IT

ruby - Rspec:allow 和 allow_any_instance_of 之间的区别

我有一个简单的MySQL包装类,它将运行查询并返回结果。classRsqldefinitialize(db)@client=Mysql2::Client@db=dbenddefexecute_query()client=@client.new(@db)client.query("select1")endend我想测试一些涉及查询结果的东西,但我不想实际连接到数据库来获取结果。我试过这个测试,但它不起作用:RSpec.describeRsqldoit"doesit"domock_database=doublersql=Rsql.new(mock_database)mock_mysql_c

ruby-on-rails - 命名空间 Controller 上的 Rspec Controller 规范找到具有相同名称的全局 Controller

当还有一个同名的全局Controller时,我在为命名空间Controller创建Controller规范时遇到了一个奇怪的问题。Controller名称是HomeController和Backend::HomeController。请注意,我还没有创建文件app/controllers/backend/home_controller.rb,只有全局Controller存在app/controllers/home_controller。rb因此我希望测试会出现错误,但事实并非如此。它过去了,全是绿色和快乐。我的规范是这样的#spec/controllers/backend/home_c

ruby-on-rails - 使用 Rspec + Factory Girl 在新线程/进程测试中数据库为空

在这篇博文之后,http://blog.arkency.com/2015/09/testing-race-conditions/我正在尝试测试并发性。但是在我的规范中,当我启动一个新线程或fork一个进程时,我无法找到记录。describe'testconcurrency'dolet(:order_1){create(:order)}let(:order_2){create(:order)}let(:order_3){create(:order)}let(:order_4){create(:order)}let(:product){create(:product)}it'testcon

ruby - RSpec 和 Open-URI 我如何模拟引发 SocketError/TimeoutError

我希望能够说明当Open-Uriopen()调用超时或引发诸如SocketError之类的异常时,我正在按预期处理事情,但是我在这方面遇到了麻烦。这是我的规范(针对SocketError):@obj.should_receive(:open).with("some_url").and_raise(SocketError)以及我使用open-uri的对象部分:beginresp=open(url)resp=resp.readrescueSocketErrorsomething=trueend然而,在这种情况下,规范会失败,出现nil.read错误。这是我这周第二次遇到这个问题,上一次我试

ruby - 干燥 RSpec 中的重复规范

在下面的测试中,Bar和Bazblock包含相同的规范。首先撇开为什么需要这样的重复不谈,我想知道如何才能把它干掉。我尝试将block转换为对象并在Bar和Baz下调用它们,但可能是因为我没有获得正确的范围,我无法使其工作。describeFoododescribeBardobefore(:each)doprepareendit"shoulddosomething"dotrueendit"shoulddosomethingelse"dotrueendenddescribeBazdobefore(:each)doprepare_something_elseendit"shoulddoso

ruby-on-rails - 使用 RSpec 和 Haml 测试嵌套布局助手

在ApplicationHelper中我有这样的代码:definside_layoutlayout='application',&block@template.instance_variable_set'@content_for_layout',capture(&block)concat\@template.render:file=>"layouts/#{layout}",:use_full_path=>trueend它的行为是这样的:应用程序.html.haml:!!!%html%head...%body=yieldcommon_pages.html.haml:-inside_lay

ruby - 在 Padrino 上模拟 current_account 以进行 rspec 测试

我正在尝试测试依赖于Padrino::Admin::AccessControl提供的current_account的padrinoController为此,我需要模拟current_account。代码是这样的:App.controller:postdopost:create,map=>'/create'doPost.create:user=>current_accountendend和rspec:describe"Postcreation"doit'shouldcreate'doaccount=Account.create:name=>'someone'loggin_asaccoun

ruby-on-rails - Rspec capybara 用户无法登录

测试设计使用capybara登录。似乎出了点问题,因为我无法使用rspec和capybara测试登录。我使用工厂女孩来定义用户FactoryGirl.definedofactory:userdoemail'admin@revol-tech.com.np'password'bhaktapur'password_confirmation'bhaktapur'admintruename'admin'confirmation_sent_at"#{DateTime.now}"confirmation_token'anupsumhikichiki'confirmed_at"#{DateTime.n

ruby - 我可以给 RSpec 匹配器取别名吗?

我得到了这两个匹配器,除了它们的名字之外是相同的:RSpec::Matchers.define:be_the_downcased_version_ofdo|actual|matchdo|actual|@actual=actual@expected=expected@actual==@expected.downcaseendfailure_messagedo|actual|"Expected#{@actual.inspect}tobethedowncasedversionof#{expected.inspect}.\nItwasnot:#{@actual.inspect}"endfail

ruby - 如何在之前访问标签过滤器(:suite)/before(:all) hook in RSpec?

我想访问命令行传递的标签过滤器命令行rspec--taguse_ffRSpec配置RSpec.configuredo|config|config.before:suite,type::featuredo#howdoIcheckifuse_fffilterwasspecifiedinthecommandline?iffilter[:use_ff]use_seleniumelseuse_poltergeistendendend在before(:suite)钩子(Hook)中,我想访问在配置的命令行中指定的标签过滤器。根据rspec-core代码库,包含标签过滤器存储在inclusion_f