如何在没有Shoulda的情况下在Rspec中进行一次线性测试?

Jer*_*ith 3 ruby rspec ruby-on-rails shoulda

我有一堆非常重复的rspec测试,它们都具有相同的格式:

it "inserts the correct ATTRIBUTE_NAME" do
     @o.ATTRIBUTE_NAME.should eql(VALUE)
end
Run Code Online (Sandbox Code Playgroud)

如果我能做一个像以下那样的线测试会很好:

compare_value(ATTRIBUTE_NAME, VALUE)
Run Code Online (Sandbox Code Playgroud)

但是,似乎并不适合这些类型的测试.还有其他选择吗?

Dav*_*sky 11

有时我后悔subject作为最终用户设备暴露.它被引入以支持扩展(如shoulda匹配器),因此您可以编写如下示例:

it { should do_something }
Run Code Online (Sandbox Code Playgroud)

但是,这样的例子读得不好:

it { subject.attribute.should do_something }
Run Code Online (Sandbox Code Playgroud)

如果您要subject明确使用,然后在示例中明确引用它,我建议使用specify而不是it:

specify { subject.attribute.should do_something }
Run Code Online (Sandbox Code Playgroud)

底层语义是相同的,但这个^^可以大声朗读.