Ao testar, você pode fazer algo como:
expect { @user.make_widget }.to change { Widget.count }.by(1)
Não. Pode haver algum motivo para que o user_id do novo widget não seja definido. Em vez disso, teste:
expect { @user.make_widget }.to change { @user.widgets.count }.by(1)
Dessa forma, você está apenas olhando para os widgets que realmente pertencem ao usuário.