Rspec/Capybara - 将 should 改为 expect
Rspec/Capybara - change should into expect
在我的 Ruby on Rails 4.2 应用程序中,我想将测试检查内联样式更改为 rspec 3 最近的 "expect" "should" 但我得到一个错误。
当我使用下面的测试时,我的测试通过了:
find('#zone')['style'].should == "background-image: url(xxxxx); background-size: cover;"
我尝试将其转换为 rspec 更新的 "expect"
expect('#zone')['style'].to eq("background-image: url(xxxxx); background-size: cover;")
但我得到这个错误:
undefined method `[]' for #<RSpec::Expectations::ExpectationTarget:0x00000008578840>
如何实现?
expect(find('#zone')['style']).to eq "background-image...."
一般来说,something.should ==
相当于写作expect(something).to eq
在使用委托方法的对象或自己实现 should
等方法的对象上存在一些细微差别("bug fixes",如果您愿意的话);但在大多数情况下,我不会为此担心;您可以认为这两种格式是等效的,但应始终以使用新的 expect
格式为目标。
另一个不错的转换是,如果您编写的测试使用(有时 隐式 定义)subject
变量 - 例如subject.should ...
,您可以将其重写为:expect(subject).to
,或者只是:is_expected.to
虽然接受的答案在技术上是正确的,但如果您有动态页面,它可能会导致不稳定的测试。当正在检查 style
属性的元素由于 JS 操作而被更新时,可能会发生这种情况,并且检查可能会在样式更改之前发生。把期望写成
会好很多
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;"]')
在我的 Ruby on Rails 4.2 应用程序中,我想将测试检查内联样式更改为 rspec 3 最近的 "expect" "should" 但我得到一个错误。
当我使用下面的测试时,我的测试通过了:
find('#zone')['style'].should == "background-image: url(xxxxx); background-size: cover;"
我尝试将其转换为 rspec 更新的 "expect"
expect('#zone')['style'].to eq("background-image: url(xxxxx); background-size: cover;")
但我得到这个错误:
undefined method `[]' for #<RSpec::Expectations::ExpectationTarget:0x00000008578840>
如何实现?
expect(find('#zone')['style']).to eq "background-image...."
一般来说,something.should ==
相当于写作expect(something).to eq
在使用委托方法的对象或自己实现 should
等方法的对象上存在一些细微差别("bug fixes",如果您愿意的话);但在大多数情况下,我不会为此担心;您可以认为这两种格式是等效的,但应始终以使用新的 expect
格式为目标。
另一个不错的转换是,如果您编写的测试使用(有时 隐式 定义)subject
变量 - 例如subject.should ...
,您可以将其重写为:expect(subject).to
,或者只是:is_expected.to
虽然接受的答案在技术上是正确的,但如果您有动态页面,它可能会导致不稳定的测试。当正在检查 style
属性的元素由于 JS 操作而被更新时,可能会发生这种情况,并且检查可能会在样式更改之前发生。把期望写成
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;"]')