为rspec的传递期望添加详细程度

时间:2013-12-10 05:42:26

标签: ruby-on-rails rspec

我正在使用rspec rails来测试我的应用程序,但我担心一些规格可能实际上会产生误导。我是否可以获得有关在控制台输出中传递规范的更多信息,以确保规范是测试行为,我很满意?

以下是输出当前的外观:

    # spec.rb

require 'spec_helper'

context "With James Bonds' car" do
    before do
        @car = {make: "Aston Martin", color: "Silver", owner: "James", age: 3}
    end

    it "should not have an age of over 1 month" do
         @car[:age].should_not == 1       
    end

end

现在,尽管汽车已经超过一个月,但这种期望会过去:

$ rspec spec.rb

.

Finished in 0.12 seconds
1 examples, 0 failure, 0 pending

为了确保我写好规格,我怎样才能得到这样的输出:

$ rspec spec.rb

.

Finished in 0.12 seconds
1 examples, 0 failure, 0 pending


Passing examples:

1) With James Bonds' car, it should not have an age of over 1 month

Pass: @car.age.should_not == 1       

       expected not: 1 
            got    : 3

3 个答案:

答案 0 :(得分:0)

您的规范中的逻辑是错误的 - 如果您想测试年龄是否小于1,请测试一下!

@car.age.should be < 1

适用于任何体面大小的应用程序的测试套件将涵盖数百甚至数千个测试 - 您真的不想在每次测试运行中涉及输出。

答案 1 :(得分:0)

Rspec对于测试输出有不同的formatters(你甚至可以自己编写)。

尝试使用文档格式运行您的规范。

rspec -fd spec.rb

其中包含更详细的输出,其中包含您在describecontextit后添加的文字。

这并不一定能保证您正在测试正确的东西(在编写测试时由您自己决定),但它确实允许您在每次运行时评估套件中的测试。

答案 2 :(得分:0)

你的问题有点令人困惑。

如果测试失败,那么您将获得您正在寻找的输出。

如果要检查正在测试的实际值,请故意使测试失败,例如将其更改为

@car.age.should == 1

话虽如此,您似乎是通过方法调用来检查年龄,但是您将汽车设置为哈希数组。从这个意义上讲,它永远不会成立,因为这种方法无法进行检查。