草庐IT

rspec-stories

全部标签

ruby-on-rails - 从 before(:each) block) 中获取完整的 RSpec 测试名称

RSpec允许您通过执行以下操作在before(:each)block中获取当前运行的测试方法名称:Spec::Runner.configuredo|config|config.before:eachdo|x|x.method_name#returns'shouldbecool'endend这是为了这样的测试:requireFile.expand_path(File.dirname(__FILE__)+'/../spec_helper')describe'Helloworld'doit'shouldbecool'do#testcodeendend是否有可能在beforeblock中获得

ruby - rspec 失败错误 : expected false to respond to `false?`

我正在运行这部分测试:describeDictionarydobeforedo@d=Dictionary.newendit'cancheckwhetheragivenkeywordexists'do@d.include?('fish').shouldbe_falseend使用这段代码:classDictionarydefinitialize@hash={}enddefadd(new_entry)new_entry.class==String?@hash[new_entry]=nil:new_entry.each{|noun,definition|@hash[noun]=definiti

ruby-on-rails - 我如何在我的 RSpec 中设置 request.referrer?

我试图避免使用我的session[:referred_by],而想使用request.referrer。但是,我的RSpec测试失败了,因为TestRequest没有存储request.referrer因此,为了使Rspec测试正常工作,我必须执行以下操作。有没有办法让它变得更好:referrer=request.referrer?request.referrer:'/'redirect_toreferrer,:alert=>error_message 最佳答案 ActionDispatch::TestRequest扩展了Actio

ruby-on-rails - 在 RSpec 单元测试中模拟竞争条件

我们有一个异步任务,它为一个对象执行一个可能长时间运行的计算。然后将结果缓存在对象上。为了防止多个任务重复相同的工作,我们添加了带有原子SQL更新的锁定:UPDATEobjectsSETlocked=1WHEREid=1234ANDlocked=0加锁只针对异步任务。对象本身仍可由用户更新。如果发生这种情况,旧版本对象的任何未完成任务都应丢弃其结果,因为它们可能已过时。使用原子SQL更新也很容易做到这一点:UPDATEobjectsSETresults='...'WHEREid=1234ANDversion=1如果对象已更新,其版本将不匹配,因此结果将被丢弃。这两个原子更新应该处理任何

ruby - 如何在 rspec 测试中包含 lib 目录

我在JRuby1.7.4上测试包含lib目录的gem时遇到问题。我想测试位于lib/vger/resources/account_manager.rb的文件我的规范文件在spec/vger/resources/account_manager_spec.rbrequire'spec_helper'describeVger::Resources::AccountManagerdo..endend我正在尝试将要测试的文件包含在spec_helper.rb中require'rubygems'require'bundler/setup'require'vger/resources/account

ruby - 如何优雅地检查 RSpec 中记录的存在

有没有更好的方法来检查RSpec中是否存在记录?Foo.where(bar:1,baz:2).count.should==1 最佳答案 与Rspec2.13.0,我能够做到Foo.where(bar:1,baz:2).shouldexist编辑:Rspec现在有anexpectsyntax:expect(Foo.where(bar:1,bax:2)).toexist 关于ruby-如何优雅地检查RSpec中记录的存在,我们在StackOverflow上找到一个类似的问题:

ruby - 有没有办法用 Rspec stub 包含模块的方法?

我有一个模块包含在另一个模块中,它们都实现了相同的方法。我想stub包含模块的方法,如下所示:moduleMdeffoo:MendendmoduleAclass第一个测试通过,但第二个输出:Failure/Error:expect(A.foo).toeq:barexpected::bargot::M为什么stub在这种情况下不起作用?有没有不同的方法来实现这一目标?谢谢!------------------------------------更新----------------------------------谢谢!使用allow_any_instance_of(M)解决了这个问题。

ruby-on-rails - 如何测试某个函数是否使用 Rails 和 rspec 2 中的事务

我有一个模型函数,我想确保它使用事务。例如:classModeldefmethodModel.transactiondo#dostuffendendend我目前的方法是在block内存入一个方法调用以引发ActiveRecord::Rollback异常,然后检查数据库是否真的发生了变化。但这意味着如果由于某种原因block内的实现发生变化,那么测试就会中断。你会如何测试这个? 最佳答案 你应该换个角度看问题。从行为的角度来看,测试函数是否使用事务是没有用的。它不会为您提供有关函数是否按预期运行的任何信息。您应该测试的是行为,即预期结

ruby - 如何忽略或跳过使用 RSpec 的测试方法?

请指导如何使用RSpec禁用以下测试方法之一。我正在使用SelenuimWebDriver+RSpec组合来运行测试。require'rspec'require'selenium-webdriver'describe'AutomationSystem'dobefore(:each)do###endafter(:each)do@driver.quitendit'Test01'do#positivetestcaseendit'Test02'do#negativetestcaseendend 最佳答案 您可以使用pending()或将it

ruby - 反对在 RSpec 测试中使用 before、let 和 subject 的理由是什么?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我刚开始编写RSpec测试,我遇到了thoughtbot'sStyleGuide,它反对let、let!、before和subject(以及其他)。我也在其他几个地方读过类似的建议(包括关于before(:all)的旧RSpecdocs警告),但我似乎找不到反对的实际论据他们。那么问题是:为什么我不应该在我的测试中使用这些方法?什么是更好的方法?