使用rspec-2.11中的新expect
语法,如何使用隐式subject
?有没有比明确引用subject
更好的方法,如下所示?
describe User do
it 'is valid' do
expect(subject).to be_valid # <<< can `subject` be implicit?
end
end
答案 0 :(得分:64)
如果您将RSpec配置为禁用should
语法,您仍然可以使用旧的单行语法,因为这不会将should
添加到每个对象:
describe User do
it { should be_valid }
end
我们briefly discussed是一种替代的单行语法,但由于不需要它而决定反对它,我们觉得它可能会增加混乱。但是,如果您愿意,可以自己轻松添加:
RSpec.configure do |c|
c.alias_example_to :expect_it
end
RSpec::Core::MemoizedHelpers.module_eval do
alias to should
alias to_not should_not
end
有了这个,你可以写成:
describe User do
expect_it { to be_valid }
end
答案 1 :(得分:17)
使用Rspec 3.0,您可以使用here所述的is_expected
。
describe Array do
describe "when first created" do
# Rather than:
# it "should be empty" do
# subject.should be_empty
# end
it { should be_empty }
# or
it { is_expected.to be_empty }
end
end
答案 2 :(得分:12)
可以使用新的命名主题语法,虽然它不是隐含的。
describe User do
subject(:author) { User.new }
it 'is valid' do
expect(author).to be_valid
end
end