2012-11-10 36 views
1

我对如何组织集成测试感到困惑。现在,他们根据页面结构组织:根据页面结构或REST动作来组织集成测试?

post_pages_spec.rb:

require 'spec_helper' 

describe "Post pages" do 

    describe "show page" do 

    describe "post destruction" do 

    end 

    describe "edit" do 

    end 

    end 

    describe "post creation" do 

    end 


end 

正如你可以看到,删除和编辑是show动作里面,因为他们出现在秀页面。

这是他们组织(基于REST动作)的另一种方式:

post_pages_spec.rb:

require 'spec_helper' 

describe "Post pages" do 

    describe "show page" do 

    end 

    describe "post destruction" do 

    end 

    describe "post creation" do 

    end 

    describe "edit" do 

    end 
end 

哪个结构更清晰,更易于维护?

+0

我简单地做功能测试有 – apneadiving

+0

@apneadiving很抱歉,但什么是功能测试? – alexchenco

+0

这就是控制器测试的命名方式。 – apneadiving

回答

2

假设您确实在询问集成测试而不是控制器测试,我喜欢从用户角度和用户类型组织集成测试。防爆。注册用户一个文件,管理员一个文件,未注册用户一个文件等。

这样做的理由是,我发现,作为一般启发式,相同的用户类型对于某个功能具有相同的先决条件,因此可以很好地结合在一起。例如,查看帖子的注册用户可能会有很多情景着重于CRUD现有的帖子内容,其中未注册的用户可能有关注帖子推荐的情景。因为这些不同的观点可能会有不同的设置和拆解,所以它们也可能更容易(即DRY-er等)单独维护。

而且,读好:)例:

describe "Registered User" do 
    context 'creating a Post' do 
    it "succeeds given all fields are filled out" 
    it "displays errors to the author if a field is missing" 
    end 
end 
+0

感谢您的建议。但那意味着每个模型都会有很多集成测试?这不会令人困惑吗? (顺便说一下,我从来没有使用'context',我直接使用'it'。使用'context'有什么好处?) – alexchenco

+0

我将定义一个集成测试比任何一个模型更抽象,并且定义为这样会让你的集成套件模型导向很混乱。是的,在简单情况下,每次交互碰巧都有一个主要模型,但是在任何复杂的应用程序中,该边界将很快跨越。防爆。一个注册用户的设置向导,创建一个基本的配置文件,并启动一篇博文。或者一个电子商务系统,其中付款(单独存储)作为订单页面的一部分。在集成层面上,我关心的是结账工作,而不是特别支付或订单工作。 – Woahdae

+0

另外,'context'是'describe'的别名,仅用于帮助读者。 'describe'在这里也可以正常工作。在这些情况下,我使用了capybara的'feature'和'scenario',这与'describe'和'context'相同,这对集成测试来说听起来更好。所以写出那种习惯:) – Woahdae