Tag: rspec

用capybara-webkit检测到死锁

我正试图通过这个规范: scenario “Edit a service”, js: true do service = create_service_for(provider, title: “First service”) fill_edit_service_form(service) expect(page).to have_css(‘#price’, text: ‘10,00 $’) end 这是使用水豚的标准导轨规格。 我使用capybara-webkit用于javascript的所有场景。 当我试图传递它时,有时候它会起作用,有时它标记的数据库中有一条丢失的记录,有时候我有这个错误: Run options: include {:locations=>{“./spec/acceptances/provider_services_spec.rb”=>[31]}} [K 1) Provider Services Edit a service Failure/Error: Unable to find matching line from backtrace ActiveRecord::StatementInvalid: PG::TRDeadlockDetected: ERROR: deadlock detected DETAIL: Process 24164 waits for AccessExclusiveLock on […]

如何声明RSpec中的示例之间共享的变量?

假设我有以下规范: … describe Thing do it ‘can read data’ do @data = get_data_from_file # [ ’42’, ’36’ ] expect(@data.count).to eq 2 end it ‘can process data’ do expect(@data[0].to_i).to eq 42 # Fails because @data is nil end end … 我想要的只是在给定的描述或上下文中共享一个变量。 我会在一个例子中写一个值,然后在另一个例子中读取它。 我怎么做?

使用Rails环境测试带Rspec的Rake任务

我正在尝试测试一个rake任务,它在其中使用了一个活动记录。 require ‘spec_helper’ require ‘rake’ load File.join(Rails.root, ‘lib’, ‘tasks’, ‘survey.rake’) describe “survey rake tasks” do describe “survey:send_report” do it “should send a report” do Rake::Task[‘survey:send_report’].invoke end end end 当我运行此规范rspec spec/lib/survey_spec.rb ,我收到此错误“ RuntimeError: Don’t know how to build task ‘environment’ 如何通过示例规范加载:enviroment任务?

从before(:each)块中获取完整的RSpec测试名称

RSpec允许您通过执行以下操作获取before(:each)块中当前运行的测试方法名称: Spec::Runner.configure do |config| config.before :each do |x| x.method_name # returns ‘should be cool’ end end 这是一个测试,如: require File.expand_path(File.dirname(__FILE__) + ‘/../spec_helper’) describe ‘Hello world’ do it ‘should be cool’ do # test code end end 是否有可能在前面的块中获得整个测试名称(也称为“Hello World应该很酷”)?

使用VCR过滤敏感数据

我正在使用VCR gem记录http交互,并在将来重播它们。 我想在uri请求中过滤掉我的实际密码值。 这是uri的样子: http://services.somesite.com/Services.asmx/Cabins Username=long&Password=john&StartDate=03%2F22%2F2012&EndDate=03%2F29%2F2012 虽然这里提供了一个解释,但我仍然不确定自己经过几次尝试后该怎么做: https://www.relishapp.com/myronmarston/vcr/v/2-0-0/docs/configuration/filter-sensitive-data 任何帮助,将不胜感激。

使用FactoryGirl测试简单的STI

我有一个类,这是其他一些专门处理行为的类的基础: class Task < ActiveRecord::Base attr_accessible :type, :name, :command validates_presence_of :type, :name, :command # some methods I would like to test end CounterTask类inheritance自Task class CounterTask < Task end 这一切都正常,直到我尝试测试基类,因为它必须有一个类型。 FactoryGirl.define do factory :task do sequence(:name) { |n| “name_#{n}” } sequence(:command) { |n| “command_#{n}” } end end 您如何测试超类的基本function?

如何使用perftools和bundler来分析RSpec?

我需要分析我通常使用bundle exec rspec spec/运行的测试套件并生成GIF图像。 运行perftools.rb以使其与bundler一起正常工作的命令是什么?

Ruby元编程,RSpec的“应该”如何工作?

我正在阅读RSpec,我试图弄清楚RSpec的“应该”是如何实现的。 有人可以提一下这个函数的元性质是如何工作的吗? 代码位于: http://github.com/dchelimsky/rspec/blob/master/lib/spec/expectations/extensions/kernel.rb TIA, -daniel 澄清: target.should == 5 目标的价值是如何传递给“应该”的,而这又是“==”与5的对比?

模拟RSpecunit testing中的竞争条件

我们有一个异步任务,可以为对象执行可能长时间运行的计算。 然后将结果缓存在对象上。 为了防止多个任务重复相同的工作,我们使用primefacesSQL更新添加了锁定: UPDATE objects SET locked = 1 WHERE id = 1234 AND locked = 0 锁定仅适用于异步任务。 对象本身仍可由用户更新。 如果发生这种情况,旧版本对象的任何未完成任务都应丢弃其结果,因为它们可能已过时。 使用primefacesSQL更新也很容易: UPDATE objects SET results = ‘…’ WHERE id = 1234 AND version = 1 如果对象已更新,其版本将不匹配,因此结果将被丢弃。 这两个primefaces更新应该处理任何可能的竞争条件。 问题是如何在unit testing中validation。 第一个信号量很容易测试,因为它只是用两种可能的场景设置两个不同的测试:(1)对象被锁定的位置和(2)对象未被锁定的位置。 (我们不需要测试SQL查询的primefaces性,因为这应该是数据库供应商的责任。) 如何测试第二个信号量? 在第一个信号量之后但在第二个信号量之前的某个时间,对象需要由第三方更改。 这将需要暂停执行,以便可以可靠且一致地执行更新,但我知道不支持使用RSpec注入断点。 有没有办法做到这一点? 还是有一些其他技术我忽略了模拟这样的竞争条件?

stub方法仅在第一次使用Rspec调用时

如何仅在第一次调用时存根方法,在第二次调用中它应按预期运行? 我有以下方法: def method do_stuff rescue => MyException sleep rand retry end 我想第一次调用do_stuff来引发MyException ,但在第二次调用中,行为正常。 我需要实现这个来测试我的rescue块而不会得到无限循环。 有没有办法实现这个目标?