【发布时间】:2020-03-14 12:06:10
【问题描述】:
我有一个规范,有一个对象和两个上下文。在一种情况下,我将一个键设置为 nil,而在另一种情况下则不设置:
describe SomeClass::SomeService, type: :model do
describe '#some_method' do
subject { described_class.new(params, current_user).some_method }
mocked_params = {
min_price: 0,
max_price: 100
}
let(:params) { mocked_params }
let(:current_user) { User.create(email: 'name@mail.com') }
context 'with invalid params' do
it 'returns nil if any param is nil' do
params[:min_price] = nil
expect(subject).to eq(nil)
end
end
context 'with valid params' do
it 'returns filtered objects' do
expect(subject).to eq([])
end
end
end
end
问题是第二次测试失败,因为min_price 仍然为零。
- 我从 Rails 5 读到我不需要
database_cleaner。我需要还是不需要? - 我认为
let方法每次看到变量时都会创建一个新对象。由于我有两个上下文,并且在这两个上下文中都调用了subject方法,并且在subject内部我有变量params,为什么params对象不是一个新的对象,其中所有字段都在每个上下文?
【问题讨论】:
标签: ruby-on-rails ruby rspec