我有一个消息类,它可以通过将参数传递给构造函数来初始化,或者不传递参数然后稍后使用访问器设置属性来初始化。属性的设置方法中正在进行一些预处理。我有一些测试可以确保setter方法执行它们应该做的事情,但我似乎无法找到一种好的方法来测试初始化方法是否实际调用了setter。classMessageattr_accessor:bodyattr_accessor:recipientsattr_accessor:optionsdefinitialize(message=nil,recipients=nil,options=nil)self.body=messageifmessageself
我有一个用纯Ruby编写的命令行(非RAILS)应用程序,我正在通过Cucumber和RSpec运行它。它遵循lib、bin、spec和feature目录的典型应用程序层次结构。到目前为止,我一直遵循编写失败的Cucumber功能/场景的传统流程,下降到RSpec以驱动支持的lib文件,然后让场景通过。不幸的是,在“bin/my_application.rb”中推出主应用程序入口点时,这似乎并不那么直接。对我来说主要问题是我不是在描述RSpec中的类,它是一个顺序Ruby脚本,用于管理应用程序的类并通过命令行参数和选项进行初始化。“bin/my_application.rb”只是一个小
我正在运行涉及Cassandra数据库中数据的rspec测试。在测试之间删除/清理数据库的最佳做法是什么?对于我的mongo数据,我正在使用DatabaseCleaner,并且正在寻找Cassandra的等效项。我目前正在我的spec_helper.rb中执行以下操作,但速度非常慢,因此我正在寻找更好的解决方案。谢谢!config.before:eachdo['column1','column2'].eachdo|name|begin$cassandra.drop_column_family(name)rescuenextensurecf=Cassandra::ColumnFamily
我一直在尝试使用webmock对多部分请求进行stub,但没有找到令人满意的解决方案。理想情况下,我想将请求stub如下:stub_request(:post,'http://test.api.com').with(:body=>{:file1=>File.new('filepath1'),file2=>File.new('filepath2')})然而,这似乎不起作用,RSpec提示请求没有被stub。打印非stub请求:stub_request(:post,"http://test.api.com").with(:body=>"--785340\r\nContent-Disposi
我正在使用RSpec(3.x)来测试一个类似于计算器的对象。该对象将结果放入散列中。但是我无法在我的测试中正确匹配散列。这是我正在谈论的示例:classObjectUnderTestdefcalculate(a,b)value=a.to_d/b{value:value{endend测试看起来像这样:RSpec.describeObjectUnderTestdoit"calculatestheproductoftwovalues"doo=ObjectUnderTest.newexpect(o.calculate(1,3)).toeql({value:0.333})endend问题在于0.
在为简单的Rails应用编写规范时,以下是否是完整测试覆盖率的正确方法?为所有用户故事编写功能规范编写Controller规范以确保各个Action响应正确并设置所有必需的变量编写模型规范以确保所有方法、验证等。正在按预期工作编写邮件规范编写路由规范这是否足够、太多(例如,如果我已经编写了功能规范,我可以跳过一些较低级别的规范)还是不够?为什么? 最佳答案 您无需为每一层中的每个对象编写规范以获得100%的测试覆盖率或测试驱动(要求您实现)应用程序中的所有重要行为。相反,正如行为驱动开发(BDD)所建议的那样,从外向内编写规范,并仅
我有一个脚本,它环绕RSpec3.4.4中的测试并导致它们在10秒后超时。TIMEOUT=10RSpec.configuredo|config|config.arounddo|example|timeout=Float(example.metadata[:timeout])rescueTIMEOUTbeginTimeout.timeout(timeout){example.run}rescueTimeout::Errorskip"Timedoutafter#{timeout}seconds"endendend此脚本位于中心位置-~/lib/spec_helper.rb-并且由我的存储库
我想为我的测试套件设置一个before(:each),将正在运行的场景的名称记录到测试日志中,这样我可以稍后分析它并知道哪个测试做了什么。这可能吗?:)感谢任何反馈! 最佳答案 您可以通过example.description访问它。见相关rspecfeature. 关于ruby-访问正在运行的RSpec/Steak场景的名称,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/732
我试图保持我的规范干净和干燥,但我对API进行了一些测试,除了正在测试的API版本之外,它们是相同的。我可以简单地使用这样的东西来重复规范:%w(v1v2).eachdo|version|describe"Query#{version}API"doit"respondswithJSON"#makethecallusingtheversionendendend但是我想要一些更简洁的东西,所以我写了这个方法:moduleRepetitivelyDescribedefrepetitively_describe(*args,&example_group_block)options=args.e
我最近将我的Rails应用程序从Rails3升级到Rails4,但此Rspec测试不再通过:#spec/models/user_spec.rb:require'spec_helper'describeUserdoit"shouldnotallowaccesstoadmin"doexpectdoUser.new(:admin=>true)end.toraise_error(ActiveModel::MassAssignmentSecurity::Error)endend我收到这个错误:Failure/Error:end.toraise_error(ActiveModel::MassAss