Rspec期望(方法)vs期望(方法).to be_true

时间:2014-03-28 19:01:09

标签: ruby-on-rails ruby rspec

我刚刚开始使用RSpec和Rails进入TDD并且我发现如果我正在测试一个方法应该是真的,如果我使用expect(方法)而不是期望,测试将会起作用(方法).to be_true。

it "is true" do
  expect(subject).to be_true
  #Works the same as...
  expect(subject)
end

是否有任何理由不使用没有.to的期望,是否会破坏测试或不捕获某些失败?只是想知道。

2 个答案:

答案 0 :(得分:1)

你没有达到你的想象。 expect(false)不会失败。 expect(true)只会成功,因为没有任何测试。 例如,如果您的规范包含以下内容:

describe "something" do
  it "does something" do
    false
    puts expect(false)
    # anything that evaluates to false
  end
end

运行rspec时会得到类似的东西:

#<RSpec::Expectations::ExpectationTarget:0x007ff0b35a28b8\>
.

Finished in 0.00061 seconds
1 example, 0 failures

基本上你没有断言任何内容,expect(subject)评估ExpectationTarget。

答案 1 :(得分:0)

我认为后者有效是巧合。

每个期望语句都会以某种方式评估为真或假。

例如

arr = ['a', 'b', 'c']
expect(arr).to include('a')

将返回true,因为arr包含'a'

因此,在您的情况下,expect(subject)expect(subject).to be_true在某种程度上等同于以下内容:

bool = true
if bool
  # Do something here

if bool == true
  # Do something here

长话短说,这并不重要,但出于可读性目的,我更倾向于expect(subject).to be_true