例如,假设我有一个Question
模型,它具有布尔字段answered
和closed
. should be read only when marked as answered
我将如何使用 RSpec测试问题的行为?这似乎是模型的行为,但我不确定如何最好地测试它。我是否应该为此行为使用 before 过滤器,并添加一个错误,说明您无法修改已回答的问题?或者有更好的方法吗?我只学习 RSpec 和 BDD。
Wayne M
问问题
886 次
1 回答
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 才能对其进行规范。
于 2009-02-09T06:51:49.397 回答