我是RSpec的新手,所以这是一个非常基本的问题。我正在写一些东西来解析文件中的大量数据,进行一些处理并返回汇总结果,这对Ruby来说非常好。我想围绕这段代码进行一些RSpec测试,但我不想在测试中模拟数据。这些文件又大又复杂,因为我希望代码能够处理这些文件,所以我想在测试中直接处理一些文件。我已经进行了大量的谷歌搜索,但我一直无法找到针对这种情况的最佳实践的任何示例-我找到的所有内容似乎都建议使用模拟数据。所以,明确地说,我想知道针对实际测试数据文件运行RSpec测试的最佳实践,而不是针对测试代码本身中模拟的东西。我非常高兴打开文件、阅读文件等,这不是问题所在。我真正感兴趣的是如何最
下面的代码不起作用,但它最好地展示了我正在努力实现的目标context"thiscontextdescribestheclass"dosubjectdo#describedclassisactuallyamoduleherec=Class.new.extend(described_class)c.some_method_that_has_been_added_through_extensioncend#...testingtheclassitselfhere...context"instancesofthisclass"dosubjectdo#thisdoesn'tworkbecaus
MichaelHartl的rails教程的list6.20显示了以下代码:beforedo@user=User.new(name:"ExampleUser",email:"user@example.com")end...describe"whenemailaddressisalreadytaken"dobeforedouser_with_same_email=@user.dupuser_with_same_email.email=@user.email.upcaseuser_with_same_email.saveendit{should_notbe_valid}end我很难理解这个概
我目前通过以下方式使用记录器:deflog_stufflogger.info{'Infologmessage'}logger.debug{expesive_action}end但我想知道记录器是否通过RSpec接收到正确的消息。如果我只是将日志行传递给输入,这会很简单:#logger.info('Infologmessage')expect(logger_mock).toreceive(:info).with('Infologmessage')但我想不出一种方法可以用block语法做这样的事情。我特别想使用这种语法,以便expensive_action仅在日志级别设置为DEBUG时被调
关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭8年前。Improvethisquestion我正在碰壁,因为我对这个rspec错误消息的含义感到非常困惑。我正在测试一件艺术品是否有成本。以下是我的rspec的片段:let(:valid_art_piece){{date_of_creation:DateTime.parse('2012-3-13'),placement_date_of_sal
我正在使用rails4+rspec3。我想进行HTTP调用,并传递两个参数(例如JSON正文或查询字符串)以及HTTPheader。我能够通过这两个之一,但不能同时通过。当我尝试这样的事情时:postapi_v1_post_path(@myid),{},{"X-Some-Header"=>"MyValue"}它工作正常,标题也很好,但如果我做类似的事情:postapi_v1_post_path(@myid),{"myparam"=>"myvalue"},{"X-Some-Header"=>"MyValue"}我收到以下错误:Failure/Error:postapi_v1_post_p
在rspec中检查接收的旧代码object.should_receive(:message)根据新的rspec语法,我们可以编写这段代码来检查should_recieveallow(object).toreceive(:message)但是我该如何检查这样的东西allow(object).to_notreceive(:message)之前我们是这样检查的object.should_not_receive(:message)#Ineedanewsyntaxwithlatestrspec.我找不到任何文档提前致谢。 最佳答案 你可以这样
我有一个简单的rake任务,里面有一个putsnamespace:atasktasksomething::environmentdoputs'Foo'endend我的规范如下describe'atask:something'dobefore{MyApp.Application.load_tasks}context'one'doitdoRake::Task['atask:something'].invokeendendcontext'two'doitdoRake::Task['atask:something'].invokeendendcontext'three'doitdoRake::
我试图了解在rspec中测试while循环的最佳方法是什么。我允许用户输入他/她想玩的游戏类型。defget_actiongets.strip.downcaseenddeftype_of_gameputs"Enterthetypeofgameyouwouldliketoplay(humanv.human,computerv.computer,orhumanv.computer):"gametype=get_actionuntil(gametype=="humanv.human"||gametype=="computerv.computer"||gametype=="humanv.com
我是使用RSpec和Ruby进行单元测试的新手,我对如何测试我的代码是否使用gets方法有疑问,但没有提示用户输入。这是我要测试的代码。这里没什么特别的,只是一个简单的衬垫。我的文件.rbMy_name=gets这是我的规范。require'stringio'defcapture_name$stdin.gets.chompenddescribe'capture_name'dobeforedo$stdin=StringIO.new("JohnDoe\n")endafterdo$stdin=STDINendit"shouldbe'JohnDoe'"doexpect(capture_name