草庐IT

ruby - 如何使用 rspec 模拟模块内的类方法

我正在尝试测试调用外部API的创建方法,但我在模拟外部API请求时遇到了问题。这是我的设置和我到目前为止尝试过的内容:classUpdatedefself.create(properties)update=Update.new(properties)beginmy_file=StoreClient::File.get(properties["id"])update.filename=my_file.filenamerescueupdate.filename=""endupdate.saveendendcontext"Storerequestfails"doit"setsablankfi

ruby-on-rails - 如何在 Rspec 中模拟 CSV foreach 方法

我有一个使用CSV.foreach方法的方法。数据应如下所示:1,0,0,11,1,0,0我想编写一个测试,如果每行中的元素数量不相同,则预计会出现错误。类似于:it"shouldraiseanerrorifinputfilelinessizediffer"doexpect{my_method(invalid_file_name)}.toraise_errorend如何模拟CSV的foreach方法以返回无效输入? 最佳答案 你确实可以stubCSV的foreach方法,但是你需要使用and_yield方法和链接来生成不止一行,即:

ruby-on-rails - 如何阻止与 RSpec 和 Capybara 的外部连接?

对于我的Rails项目,我想编写非理想条件下的测试,例如缺少互联网连接或超时。例如,我正在使用gem联系API,如果我的应用程序和外部API之间存在连接问题,我想确保正确处理错误。我已经可以通过用VCR制作夹具并从“盒式磁带”中删除响应来做到这一点。但是,这有缺点:必须手动完成。如果我正在与一个团队(我就是)一起工作,那么磁带就不会被忽略。我怎样才能简单地在我的RSpec测试中创建一个阻止外部连接的block,模拟缺少互联网连接? 最佳答案 根据这篇思想机器人文章https://robots.thoughtbot.com/how-t

ruby-on-rails - Rspec:在模型无效时显示模型的错误

我通常在我的Rspec测试中写这样的东西:user.new(...)user.shouldbe_valid问题是,当该测试失败时,我看不到用户对象上的错误。有什么好的方法可以重写此测试,以便在Rspec输出中看到类似user.errors.inspect的内容?我试过user.errors.shouldbe_empty,但仍然只是说“预期为真,结果为假。” 最佳答案 您可以通过定义自定义匹配器来做到这一点。像这样的东西应该可以解决问题。RSpec::Matchers.define:be_validdomatchdo|actual|a

ruby-on-rails - rails - 找不到生成器 rspec :install.

我不知道它找不到生成器。geminstallrspecFetching:rspec-core-2.8.0.gem(100%)Fetching:rspec-expectations-2.8.0.gem(100%)Fetching:rspec-mocks-2.8.0.gem(100%)Fetching:rspec-2.8.0.gem(100%)Successfullyinstalledrspec-core-2.8.0Successfullyinstalledrspec-expectations-2.8.0Successfullyinstalledrspec-mocks-2.8.0Succe

ruby - rspec - 如何与预期中的实际 DateTime 进行比较?

我的rspec:it"canshowthecurrentmonthname"doexpect(Calendar.create_date_using_month(1)).toeq'2000-01-0100:00:00-0500'end失败:expected:"2000-01-0100:00:00-0500"got:2000-01-0100:00:00-0500对于我的代码:defself.create_date_using_month(n)Time.new(2000,n,1)end我应该/可以更改RSpec以便与实际字符串而不是日期进行比较吗?我试过:Date.strptime("{20

ruby-on-rails - 如何修复 2.99 版的 RSpec 语法?

我最近将我的Rails4应用程序从RSpec2.X升级到2.99,尽管运行了Transpec已经,我的一些测试仍然失败。require'spec_helper'describeInvoice,:type=>:modeldobefore:eachdo@user=FactoryGirl.create(:user)@invoice=FactoryGirl.create(:invoice,:user=>@user)endit"isnotopen"doexpect{FactoryGirl.create(:payment,:invoice=>@invoice,:amount=>100)}.toch

ruby-on-rails - 使用 Bullet 和 RSpec gem 减少 n+1 查询

将BulletGem与RSpec一起使用的有效方法是什么?现在我觉得如果我将它与我当前的单元测试框架一起使用,我会收到很多通知或测试失败,因为测试本身中的n+1个查询与我的生产应用程序中发生的事情无关,例如检查值或关联。因此,修复n+1故障不需要在我的Controller或模型上设置任何东西,而是需要在我的测试设置中设置一些东西以不抛出该特定错误,而且我没有看到我的应用程序有真正的性能改进。 最佳答案 最有效的方法是根本不用。在测试中减少n+1查询可能有一些合法的优势,最明显的是加快整体执行时间。然而,您很可能是testingtoo

ruby-on-rails - 使用 rspec 测试 Rails Controller

我是Rails的新手,我正在尝试使用rspec测试Controller。我的第一个测试是在调用show操作时,它应该通过url查找类别。问题是当我添加stub代码时,出现以下错误:#的未定义方法“查找”我的测试是这样的:require'spec_helper'describeCategoriesControllerdodescribe"GET/category-name/"dobefore(:each)do@category=mock_model(Category)Category.stub!(:find).with(:first,:conditions=>["url=:url",{:

ruby-on-rails - 如何从 RSpec 获取当前测试文件名?

我正在尝试加快大型RSpec项目的测试。除了使用RSpec的--profile选项外,我还想打印出运行时间最长的测试文件[1]。在我的spec_helper.rb中,我将正在测试的类和总时间转储到一个文件中,但是因为我们有spec/model和spec/request目录我真的很希望能够打印当前测试的文件名而不仅仅是类名(described_class),这样用户就可以在model/foo_spec.rb和request/foo_spec.rb优化时。在spec/spec_helper.rb的beforeblock中,如何获取当前测试文件的文件名?我的(经过大量修剪的)spec_hel