标签: rspec3

在使用RSpec测试Rails帮助器方法时如何在params哈希中设置一个值?

在Ruby on Rails 4中,使用RSpec 3.1,如何params在测试Rails辅助方法时设置哈希值?

我想设置params[:search] = 'my keyword search'在我的帮助方法中使用,然后从it示例块中调用它.

规格/助理/ books_helper_spec.rb:

require 'rails_helper'

describe BooksHelper do
  describe "#page_title_helper" do
    let(:params) { {search: 'my keyword search'} }

    it "should read the params hash" do
      expect(helper.params[:search]).to eq "my keyword search"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

应用程序/佣工/ books_helper.rb:

BooksHelper
  def title_helper
    if params[:search]
      "Books related to #{params[:search]}"
    else
      "All Books"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rspec-rails ruby-on-rails-4 rspec3

18
推荐指数
1
解决办法
5788
查看次数

在Rails中测试Rake:在测试中出现多个错误

我有一个rake任务,根据环境防范危险的R​​ails rake rasks.它工作正常.当我在RSpec中测试每个单独的危险方法时,测试通过.当我连续测试多个时,对于多个环境,测试在第一个测试后失败.例如,即使我为同一危险动作多次运行测试rake db:setup,它也只会在第一次通过.如果我将测试作为单独的it语句运行,每个危险操作一个,只有前两个将通过(有4个).

如何在这里使RSpec正常运行,并在套件中运行时通过所有测试?

耙子任务

# guard_dangerous_tasks.rake
class InvalidTaskError < StandardError; end
task :guard_dangerous_tasks => :environment do
  unless Rails.env == 'development'
    raise InvalidTaskError
  end
end

%w[ db:setup db:reset ].each do |task|
  Rake::Task[task].enhance ['guard_dangerous_tasks']
end
Run Code Online (Sandbox Code Playgroud)

RSpec测试

require 'spec_helper'
require 'rake'
load 'Rakefile'

describe 'dangerous_tasks' do
  context 'given a production environment' do
    it 'prevents dangerous tasks' do
      allow(Rails).to receive(:env).and_return('production')

      %w[ db:setup db:reset ].each do |task_name|
        expect { Rake::Task[task_name].invoke }.to raise_error(InvalidTaskError)
      end
    end
  end

  context 'given a test …
Run Code Online (Sandbox Code Playgroud)

rake rspec ruby-on-rails ruby-on-rails-4 rspec3

18
推荐指数
1
解决办法
762
查看次数

RSpec中"be_true"和"be true"之间的区别是什么?

任何一个可以请解释一下我一下的区别be_true,并be true用简单的例子红宝石英寸 我也见过be_true并且be_false改为be_truthybe_falsey

我有一个'be true'工作的例子,但当我尝试使用'be_true''be_truthy'规格失败.

我使用的是RSpec 3.1.7版

ruby rspec ruby-on-rails rspec3

15
推荐指数
1
解决办法
5752
查看次数

使用时升级到rspec 3导致错误应该有(1).error_on

由于我更新了我的Gemfile并转移到rspec 3,在许多测试中,我收到错误:way:

it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      Deal.new(hash).should have(1).error_on(:details)
    end
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Failure/Error: Deal.new(hash).should have(1).error_on(:details)
     NoMethodError:
       undefined method `have' for #<RSpec::ExampleGroups::Deal_2::TestsOnDealsModelsValidations>
Run Code Online (Sandbox Code Playgroud)

我读过我现在应该使用"expect"而不是应该但是have(1).error_on,我应该如何编写它以符合rspec 3?

我尝试了以下但它仍然无法正常工作:

it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      expect(Deal.new(hash).error_on(:details).size).to eq(1)
    end
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rspec3

12
推荐指数
2
解决办法
3830
查看次数

rspec挂起导致错误的测试

it 'should be an array and not be empty' do
  pending
  expect(a.class).to be(Array)
  expect(a.empty?).to be(false)
  expect(a.first.class).to be(ExampleClass)
end
Run Code Online (Sandbox Code Playgroud)

当我运行rspec时:

Failures:

  1) should be an array and not be empty FIXED
     Expected pending 'No reason given' to fail. No Error was raised.
     # ./spec/example_spec.rb:19
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这被列为失败?

ruby rspec ruby-on-rails rspec3

12
推荐指数
1
解决办法
4377
查看次数

Rails 4,rspec 3:模型验证测试

我有一个organization具有属性的对象name, doing_business_as.我需要验证它name是不一样的doing_business_as.

# app/models/organization.rb
class Organization < ActiveRecord::Base
  validate :name_different_from_doing_business_as

  def name_different_from_doing_business_as
    if name == doing_business_as
      errors.add(:doing_business_as, "cannot be same as organization name")
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

我有一个匹配的rspec文件来验证这个:

# spec/models/organization_spec.rb
require "rails_helper"

describe Organization do
  it "does not allow NAME and DOING_BUSINESS_AS to be the same" do
    organization = build(:organization, name: "same-name", doing_business_as: "same-name")

    expect(organization.errors[:doing_business_as].size).to eq(1)
  end
end
Run Code Online (Sandbox Code Playgroud)

然而,当我运行规范时,它失败了,这就是我得到的:

$ rspec spec/models/organization_spec.rb

Organization
  does not allow NAME and DOING_BUSINESS_AS to be …
Run Code Online (Sandbox Code Playgroud)

validation ruby-on-rails-4 rspec3

12
推荐指数
1
解决办法
2万
查看次数

使用RSpec Mocks测试块是否通过

我可以测试参数是否传递如下:

RSpec.describe do
  it do
    obj = double
    expect(obj).to receive(:method).with(1, 2, 3)
    obj.method(1, 2, 3)
  end
end
Run Code Online (Sandbox Code Playgroud)

我该怎么做一个块参数?我的理想代码:

RSpec.describe do
  it do
    obj = double
    proc = Proc.new{}
    expect(obj).to receive(:method).with(1, 2, 3).with_block(proc)
    obj.method(1, 2, 3, &proc)
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby rspec rspec3

11
推荐指数
2
解决办法
6580
查看次数

RSpec:重新打开类时,存根Rails.application.config值不起作用?

我在应用程序配置中定义了一个选项.我要测试的类是在gem中定义的(不是由我编写的).我想重新开课:

Myclass.class_eval do

   if Rails.application.config.myoption=='value1'
      # some code
      def self.method1
      end
   else 
       # another code
      def self.method2
      end
   end
end
Run Code Online (Sandbox Code Playgroud)

我想使用RSpec 3测试此代码:

# myclass_spec.rb

require "rails_helper"

RSpec.describe "My class" do
  allow(Rails.application.config).to receive(:myoption).and_return('value1')

  context 'in taxon' do

  it 'something' do
    expect(Myclass).to respond_to(:method1)
  end

  end
end
Run Code Online (Sandbox Code Playgroud)

如何在运行重新打开类的代码之前存根应用程序配置值.

ruby-on-rails rspec3

10
推荐指数
1
解决办法
3465
查看次数

使用serverspec使用相同的测试测试多个主机

Serverspec站点的"高级提示"部分显示了使用相同测试集测试多个主机的示例.我已经建立了一个我自己的例子(https://gist.github.com/neilhwatson/81249ad393800a76a8ad),但是有问题.

第一个问题是测试在第一次失败时停止,而不是继续通过该批次并保持计数.第二个是故障输出并不表示故障发生在哪个主机上.我该怎么做才能解决这些问题并为所有主机生成最终报告?

ruby rspec rspec3 serverspec

9
推荐指数
1
解决办法
915
查看次数

`require':无法加载这样的文件 - spec_helper(LoadError)

我正在创造

bundler gem --test=rspec MyGem.
Run Code Online (Sandbox Code Playgroud)

我正在获取存储库结构.

当我尝试运行rspec代码时,我收到以下错误:

 `require': cannot load such file -- spec_helper (LoadError)
Run Code Online (Sandbox Code Playgroud)

然后我尝试应用require relative但我仍然收到错误:

sheetal@ubuntu:~/sheetal/spec$ rspec sheetal_spec.rb 
\/home/sheetal/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- spec_helper (LoadError)
    from /home/sheetal/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /home/sheetal/sheetal/spec/sheetal_spec.rb:1:in `<top (required)>'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `block in load_spec_files'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `each'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/configuration.rb:1105:in `load_spec_files'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:96:in `setup'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:84:in `run'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:69:in `run'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/lib/rspec/core/runner.rb:37:in `invoke'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/gems/rspec-core-3.1.7/exe/rspec:4:in `<top (required)>'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/bin/rspec:23:in `load'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/bin/rspec:23:in `<main>'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/bin/ruby_executable_hooks:15:in `eval'
    from /home/sheetal/.rvm/gems/ruby-2.2.0/bin/ruby_executable_hooks:15:in `<main>'
Run Code Online (Sandbox Code Playgroud)

ruby rspec rspec2 rspec-rails rspec3

8
推荐指数
1
解决办法
2万
查看次数