1

valid?我有一些方法与 ActiveRecord 的、invalid?errors;以相同的方式“相关” 。context以及我想在其中锻炼/演示它们的几个s。

context 很明显,有一个vs方法返回的矩阵。

context一种常见的模式/实践是将s嵌套在describe '#<method>'块中,而不是反过来,对吗?我没有为每个方法复制contexta 中的 s,而是describe为“集合”尝试了一个块。

但是……#errors比其他的更复杂,更值得关注——所以看起来它确实值得一个describe '#errors'障碍

describe MyClass do
    ...
    describe '#valid? / #invalid? / #errors' do
        context 'all good' do
            ...
            it { should be_valid }
            it { should_not be_invalid }

            describe '#errors' do
                it { should be_an_instance_of( Hash )}
                it { should be_empty }
                it ...
                ...
            end
        end

        context 'some bad' do
            ...
            it { should_not be_valid }
            it { should be_invalid }

            describe '#errors' do
                it { should be_an_instance_of( Hash )}
                it ...
                its ...
                ...
            end
        end
    end
    ...
end

随着contexts 的增多,describe '#errors'andit { should be_an_instance_of( Hash )}开始感觉重复。

有没有 DRYer 方法可以做到这一点?这是“可接受的”未干燥的吗?

TIA

4

1 回答 1

1

约定是describe针对“事物”和context“状态”的,所以是的,在我看来,您已经适当地嵌套并使用了它们。至于您的其他问题,我不知道 DRYer 的方式来做您所做的事情,是的,我认为您在 DRY 中所展示的内容是可以接受的。如果您的#errors案例之间有更多的共同点,您可以引入一个“共享示例组”,但在这种情况下似乎不需要这样做。

尽管如此,我不认为自己是这个主题的专家,并期待任何更明智的意见。

于 2013-08-13T22:01:03.773 回答