草庐IT

rspec-stories

全部标签

ruby - RSpec:如何在期望语法中使用数组包含匹配器

我使用newRSpecsyntax(expect而不是should)并且我想测试一个数组是否包含另一个数组的元素。在旧语法中它将是:array1.shouldinclude(array2)在我尝试编写的新语法中:expect(array1).toinclude(array2)但是我得到了一个错误(这很合理):TypeError:wrongargumenttypeArray(expectedModule)然后我写道:expect(array1).tobe_include(array2)但它很丑陋而且没有用:显然它检查array2是否是array1的元素,而不是检查array2的所有元素是

ruby - 如何将消息附加到 RSpec 检查?

在RSpec中:我可以像在xUnit风格的测试框架中那样将消息附加到支票上吗?怎么办?assert_equalvalue1,value2,'somethingiswrong' 最佳答案 对于RSpec3+:消息可以自定义为字符串或使用proc(查看引用资料)。expect(1).toeq(2),'oneisnottwo!'CustomizedmessageRSpectriestoprovideusefulfailuremessages,butforcasesinwhichyouwantmorespecificinformation,

ruby - 如何验证 RSpec 中的退出和中止?

我正在尝试为我的脚本接收到的命令行参数指定行为,以确保所有验证都通过。我的某些命令行参数将导致调用abort或exit,因为提供的参数丢失或不正确。我正在尝试类似这样的方法,但它不起作用:#something_spec.rbrequire'something'describeSomethingdobeforedoKernel.stub!(:exit)endit"shouldexitcleanlywhen-hisused"dos=Something.newKernel.should_receive(:exit)s.process_arguments(["-h"])endendexit方法

ruby-on-rails - 正在进行 Rspec/Capybara 加载,循环要求被认为是有害的

不确定这是否是Capybara问题,但我刚刚重新安装了Rails(4.1.1)和RspecRails(3.0.1),我想使用Capybara(2.3.0),但从未使用过我遇到了问题。我在spec/features中创建了一个“spec”,并且该spec本身按预期运行并通过,但是当rspec运行时我收到以下“警告”。有任何想法吗?我是否只需要在ruby​​级别或其他级别禁用警告?/Users/typeoneerror/.rvm/gems/ruby-2.1.2@doki/gems/mail-2.5.4/lib/mail/network/delivery_methods/sendmail.r

ruby - 仅针对特定参数的 Rspec stub 方法

有没有办法为特定参数stub方法。像这样boss.stub(:fire!).with(employee1).and_return(true)如果任何其他员工被传递给boss.fire!方法,我会得到bossreceivedunexpectedmessage错误,但我真正想要的只是覆盖具体论证的方法,其他的就留着吧。知道如何做到这一点吗? 最佳答案 您可以为fire!方法添加一个默认stub,它将调用原始实现:boss.stub(:fire!).and_call_originalboss.stub(:fire!).with(emplo

ruby - Rspec 的 `should_receive` 是否有侵入性较小的替代方案?

在编写Rspec测试时,我经常对should_receive感到沮丧。我想知道是否有侵入性较小的替代方案。例如:describe"makingacake"doit"shouldusesomeothermethods"do@baker.should_receive(:make_batter)@baker.make_cakeendend对should_receive的调用是一个很好的描述,但它破坏了我的代码,因为should_receive通过屏蔽原始方法来工作,而make_cake除非make_batter实际上返回一些面糊,否则无法继续。所以我把它改成这样:@baker.should_

ruby - 在 Rspec 中测试 STDOUT 输出

我正在尝试为这个声明建立一个规范。使用“puts”很容易print"'#{@file}'doesn'texist:CreateEmptyFile(y/n)?" 最佳答案 RSpec3.0+RSpec3.0addedanewoutputmatcher为此目的:expect{my_method}.tooutput("mymessage").to_stdoutexpect{my_method}.tooutput("myerror").to_stderr最小测试Minitest还有一个叫做capture_io的东西:out,err=capt

ruby - 在 RSpec-2.11 中使用隐式 `subject` 和 `expect`

使用rspec-2.11中新的expect语法,如何使用隐式的subject?有没有比显式引用subject更好的方法,如下所示?describeUserdoit'isvalid'doexpect(subject).tobe_valid# 最佳答案 如果您将RSpec配置为禁用should语法,您仍然可以使用旧的单行语法,因为这不涉及将should添加到每个对象:describeUserdoit{shouldbe_valid}end我们brieflydiscussed一种替代的单行语法,但决定反对它,因为它不需要,我们觉得它可能会增

ruby - 在 RSpec 测试期间抑制控制台输出

我正在测试将一些消息(带有puts、p警告等)放在控制台上的类。我只是想知道在RSpec测试期间是否有任何抑制此输出的能力? 最佳答案 我通过将$stout重定向到文本文件来抑制类中的puts输出。这样,如果我出于任何原因需要查看输出,它就在那里,但不会混淆我的测试结果。#spec_helper.rbRSpec.configuredo|config|config.before(:all,&:silence_output)config.after(:all,&:enable_output)endpublic#Redirectsstde

ruby - RSpec:如何测试文件操作和文件内容

在我的应用程序中,我有以下代码:File.open"filename","w"do|file|file.write("text")end我想通过RSpec测试这段代码。这样做的最佳做法是什么? 最佳答案 我建议为此使用StringIO并确保您的SUT接受要写入的流而不是文件名。这样,可以使用不同的文件或输出(更可重用),包括字符串IO(有利于测试)因此在您的测试代码中(假设您的SUT实例是sutObject并且序列化程序被命名为writeStuffTo:testIO=StringIO.newsutObject.writeStuffT