【问题标题】:How to remove duplication from RSpec如何从 RSpec 中删除重复项
【发布时间】:2010-03-22 20:41:20
【问题描述】:

上下文“答案是正确的”做

before(:each) do
  @answer = stub_model(Answer, :correct => true).as_new_record
  assigns[:answer] = @answer

  render "answers/summarize"
end

it "should display flashcard context properly" do
  response.should contain("Quiz")
end

it "should summarize results" do
  response.should contain("is correct")
end

结束

上下文“答案不正确”做

before(:each) do
  @answer = stub_model(Answer, :correct => false).as_new_record
  assigns[:answer] = @answer

  render "answers/summarize"
end

it "should display flashcard context properly" do
  response.should contain("Quiz")
end

it "should summarize results" do
  response.should contain("is incorrect")
end

结束

如何避免在上述两种情况下重复以下块?

it "should display flashcard context properly" do

  response.should contain("Quiz")

结束

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    您的规范描述了您期望从代码中获得的行为 - 这种重复量是可以的。

    如果它失控,请使用不同的上下文来隔离不同的期望。例如,您可以将这些重复的期望因素考虑到一个新的上下文中,该上下文只测试页面,而不管答案是什么。

    【讨论】:

      【解决方案2】:

      如果你真的想结束你的一些测试,你可以这样做:

      def answer_tests
        it "should display flashcard context properly" do
          response.should contain "Quiz"
        end
      
        it "should do be awesome" do
          response.should be_awesome
        end
      end
      
      context "answer is correct" do
        answer_tests
      
        it "should summarize results" do
          response.should contain "is correct"
        end
      end
      
      context "answer is incorrect" do
        answer_tests
      
        it "should summarize results" do
          response.should contain "is incorrect"
        end
      end
      

      如您所见,当您要在一个方法中包含多个测试时,这非常方便。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        • 1970-01-01
        • 2013-09-04
        • 2022-01-03
        • 2011-04-19
        • 2015-05-23
        相关资源
        最近更新 更多