我有一个类和一个规范。
class Store
def activate(product_klass, product_id)
product = product_klass.find(product_id)
if product.inactive?
product.update_attribute :active, true
end
end
end
describe Store do
it "should activate an inactive product" do
product = mock
product.stub(:inactive?).and_return(true)
store = Store.new
store.activate(22) #
product.should be_active
end
end
运行规范失败。我得到:
Mock received unexpected message :find_by_id with (1)
为了满足这一点,我 product.should_receive(:find_by_id).with(1).and_return(product)
在行前添加store.activate(product, 22)
. (这似乎是错误的做法,因为我不希望我的测试对我正在测试的方法的内部了解太多)
再次运行规范,我得到了失败,下面的行返回false
而不是预期的true
:
product.should be_active
所以,它返回false
是因为product.update_attribute :active, true
并没有真正设置active
为true
:它只是被模拟吸收了。
我有很多问题。如何进行rspec'cing?我应该如何测试呢?我是否正确使用了模拟和存根?
任何帮助深表感谢。