rspec的上下文

use*_*617 1 ruby rspec ruby-on-rails function

我有一个基本的疑问.如果rspec文件包含许多上下文:

describe Name do
context "number1" do
.......
.......
end
context "number 2" do
.......
.......
end
context "number 3" do
.......
.......
end
Run Code Online (Sandbox Code Playgroud)

如何在.rb文件中描述每个上下文的函数?他们应该在同一个班级还是不同班级?我有什么书可以阅读以提高我对此的了解吗?

MrD*_*anA 9

我在定义rspec文件时使用的结构(基于我在rspec上完成的读取)是describes用于描述特定函数,以及context通过函数讨论状态和/或路径的特定上下文.

示例类:

class MyClass
    def self.my_class_method(bool)
        if bool == true
            return "Yes"
        else
            return "No"
        end
    end

    def my_instance_method
        today = Date.today
        if today.month == 2 and today.day == 14
            puts "Valentine's Day"
        else
            puts "Other"
        end
     end
end
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经定义了一个类方法和一个实例方法,它们可以实现非常愚蠢和随机的功能.但关键在于:类方法将根据参数执行不同的操作,并且实例方法将根据一些外部因素执行不同的操作:您需要测试所有这些,并且这些是不同的上下文.但是我们将描述 rspec文件的函数.

Rspec文件:

describe MyClass do
    describe ".my_class_method" do
        context "with a 'true' argument" do
            it "returns 'Yes'." do
                MyClass.my_class_method(true).should eq "Yes"
            end
        end

        context "with a 'false' argument" do
            it "returns 'No'." do
                MyClass.my_class_method(false).should eq "No"
            end
        end
    end

    describe "#my_instance_method" do
        context "on Feb 14" do
            it "returns 'Valentine's Day'." do
                Date.stub(:today) { Date.new(2012,2,14) }
                MyClass.new.my_instance_method.should eq "Valentine's Day"
            end
        end

        context "on a day that isn't Feb 14" do
            it "returns 'Other'." do
                Date.stub(:today) { Date.new(2012,2,15) }
                MyClass.new.my_instance_method.should eq "Other"
            end
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到describe用于说明您所描述的方法,并与您班级中方法的名称相匹配.将context用于评估不同条件下的方法可以被称为,或影响该方法的工作方式不同的状态.

希望这可以帮助!