例如,假设我有一个Question
模型,它具有布尔字段answered
和closed
。我如何使用RSpec测试问题should be read only when marked as answered
的行为?这似乎是模型的行为,但我不确定如何最好地测试它。我是否应该使用前置过滤器来解决此问题,并添加错误,说明您无法修改已回答的问题?或者有更好的方法吗?我只学习RSpec和BDD。
答案 0 :(得分:2)
取决于你需要它的工作方式,但是......
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
或许您希望在保存时引发错误?或者也许没有错误,它只是默默地不改变价值?这取决于你想要如何实现它,但方法是相同的。
然后设置一个已回答的问题,然后查看是否可以更改其数据。如果你不能,那么规范就通过了。这取决于您希望模型的行为如何工作。关于BDD的好处是你首先考虑这个接口,因为你必须实际使用一个对象API才能指出它。