例如,让我们说有一个 Question 模型,有的布尔的领域 answeredclosed.我将如何测试行为是一个问题 should be read only when marked as answered 使用最高反射率?这似乎是它的行为模式,但是我不确定如何最好地进行测试。我应该采用一个过滤器之前为这种行为,并添加一个错误说你不能修改的回答问题吗?或者是有更好的方式来做到这一点?我只是学习最高反射率和BDD。

有帮助吗?

解决方案

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

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以规范。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top