我刚刚开始使用RSpec和Rails进入TDD并且我发现如果我正在测试一个方法应该是真的,如果我使用expect(方法)而不是期望,测试将会起作用(方法).to be_true。
it "is true" do
expect(subject).to be_true
#Works the same as...
expect(subject)
end
是否有任何理由不使用没有.to的期望,是否会破坏测试或不捕获某些失败?只是想知道。
答案 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
。