在运行我的规范时出现错误,我猜可能是update_all已经被弃用了。
- 代码:**
def update_the_members_email
self.the_members.update_all(email: self.email)
end
- 规格:**
describe 'update_the_members_email' do
describe 'when after_save is triggered' do
let(:updated_email) { Faker::Internet.safe_email }
before do
user.email = updated_email
user.save
end
it 'triggers update_all' do
expect(user).to receive_message_chain(:the_members, :update_all).with({ :email => updated_email })
end
end
end
end
- 错误:**
'1)触发after_save时用户update_the_members_email触发update_all失败/错误:期望(用户)。接收消息链(:成员,:更新所有)。使用({:email =〉新电子邮件})
[....].the_members(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
'
我试过使用update_column而不是update_all。尝试了其他一些方法来说明这一点。花了大量的时间进行研究。
1条答案
按热度按时间bz4sfanl1#
假设
update_the_members_email
由保存后回调调用...The mock必须在调用之前设置。
before
发生在测试 * 之前 *。因此user.email
发生在 * 之前 * 您设置了预期。预期永远不会看到它。注意,这里不需要模拟,只要确保用户有一些成员,然后直接测试即可。
the_members.update_all(email: email)
with(email: updated_email)