The rspec Command

1
2
rspec simple_math_spec.rb  #执行单个文件
rspec spec                 #执行spec文件夹下全部文件 

–format,设置输出格式

1
2
3
4
5
rspec path/to/my/specs --format documentation
rspec path/to/my/specs --format html:path/to/my/report.html
rspec path/to/my/specs  --format progress \
                        --format nested:path/to/my/report.txt \
                        --format html:path/to/my/report.html

其他

1
2
rspec spec --backtrace
rspec spec --color

Rake

1
2
rake spec               #执行spec下的全部specs文件
rake spec:controllers   #执行spec下的全部specs/controllers文件

完整命令列表可以通过执行rake -T spec获取, 这些命令被定义在RSpec::Core::RakeTask

可以在Rakefile里添加以下内容作来配置以rake执行的rspec

1
2
3
4
5
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new do |t|
  t.rspec_opts = ["--color", "--format", "specdoc"]
end

Filtering

Inclusion

1
2
3
4
5
6
7
8
9
10
11
RSpec.configure do |c|
  c.filter = { :focus => true }
end

describe "group" do
  it "example 1", :focus => true do
  end

  it "example 2" do
  end
end

上面这段代码执行后会得到类似下面的输出

1
2
3
4
5
group
  example 2

Finished in 0.00067 seconds
1 example, 0 failures

其中it()里的:focus => true部分被称为metadata
值可以通过example.metadata[:focus]获取到

Exclusion

1
2
3
4
5
6
7
8
9
10
11
RSpec.configure do |c|
c.exclusion_filter = { :slow => true }
end

describe "group" do
  it "example 1", :slow => true do
  end

  it "example 2" do
  end
end

执行时”example 2”被排除在外

Lambdas

Inclusion与Exclusion的filter都可以接受一个lambda处理更复杂的逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
require 'ping'

RSpec.configure do |c|
  c.exclusion_filter = {
    :if => lambda {|what|
      case what
      when :network_available
        !Ping.pingecho "example.com", 10, 80
      end
    }
  }
end

describe "network group" do
  it "example 1", :if => :network_available do
  end

  it "example 2" do
  end
end

在ActiveAdmin下自定义filter

rails4之后,之前的`model`里加入`search_methods :filter_name`的做法已经失效,需修改为:``` ruby class PromoCode (ids) { with_tags(ids) } def self. …… Continue reading

Mac上搭建Phonegap环境

Published on October 02, 2014

Rails遗留程序里最常犯的错误(译)

Published on July 23, 2014