在我的Ruby on Rails 4.2应用程序中,我想将一个测试检查内联样式更改为rspec 3更近期的“expect”上的“should”但是我收到错误。
当我使用下面的测试时,我的测试通过了:
find('#zone')['style'].should == "background-image: url(xxxxx); background-size: cover;"
我试图将它转换为rspec更近期的“期待”
expect('#zone')['style'].to eq("background-image: url(xxxxx); background-size: cover;")
但是我收到了这个错误:
undefined method `[]' for #<RSpec::Expectations::ExpectationTarget:0x00000008578840>
如何实现这一目标?
答案 0 :(得分:2)
expect(find('#zone')['style']).to eq "background-image...."
通常,something.should ==
相当于撰写expect(something).to eq
对于使用委托方法的对象,或者自己实现should
等方法,存在一些细微差别(&#34;错误修复&#34;,如果您愿意);但在大多数情况下,我不担心;您可以考虑两种格式等效,但应始终使用新的expect
格式。
另一个很好的转换是,如果您编写的测试使用(有时是隐式定义的)subject
变量 - 例如subject.should ...
,您可以将其重写为:expect(subject).to
,或者只是:is_expected.to
答案 1 :(得分:2)
虽然接受的答案在技术上是正确的,但如果您有动态页面,它可能会导致片状测试。当由于JS操作而正在更新正在检查style
属性的元素时,可能会发生这种情况,并且可以在样式更改之前进行检查。将期望写为
expect(page).to have_css('#zone[style="background-image: url(xxxxx); background-size: cover;"]')
或
expect(find('#zone')).to match_css('[style="background-image: url(xxxxx); background-size: cover;"]')