【问题标题】:How do you spec out "read-only" behavior of a Model?您如何指定模型的“只读”行为?
【发布时间】:2009-02-08 14:28:59
【问题描述】:

例如,假设我有一个 Question 模型,它具有布尔字段 answeredclosed。我将如何使用 RSpec 测试问题 should be read only when marked as answered 的行为?这似乎是模型的行为,但我不确定如何最好地测试它。我是否应该为此行为使用 before 过滤器,并添加一个错误,说明您无法修改已回答的问题?或者有更好的方法吗?我只是在学习 RSpec 和 BDD。

【问题讨论】:

    标签: ruby-on-rails rspec bdd


    【解决方案1】:

    取决于您需要它如何工作,但是...

    describe Question do
      it "should be read only when marked as answered" do
        question = Question.new(:title => 'old title')
        question.answered = true
        question.save
    
        # this
        lambda {
          question.title = 'new title'
        }.should raise_error(ReadOnlyError)
    
        # or
        question.title = 'new title'
        question.save
        question.title.should == 'old title'
    
        # or
        quesiton.title = 'new title'
        question.save.should be_false
      end
    end
    

    或者您可能希望在保存时引发错误?或者也许没有错误,它只是默默地不改变值?实现方式由您决定,但方法是相同的。

    1. 将对象设置为您想要指定的状态
    2. 确保您的对象在该状态下符合您的预期

    所以设置一个已回答的问题,然后看看您是否可以更改其中的数据。如果你不能,那么规范就通过了。这取决于您希望模型的行为如何工作。 BDD 的优点在于您首先考虑这个接口,因为您必须实际使用对象 API 才能对其进行规范。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多