Проблема с кодом заключается в том, что после того, как вы оформили метод, он больше не существует в модели.
Вы оформили метод "компании" (когда устанавливаете ожидание для него)и теперь он больше не вызывает фактическую ассоциацию реальных компаний на модели, а созданную вами заглушку ... которая возвращает ноль (потому что вы не установили для нее значение возврата).
Затем, когда вы пытаетесь поместить компанию в этот новый, нулевой метод, используя <<, он говорит, что не может этого сделать. </p>
Чтобы обойти это, вы можете сделать то, что сделали, то есть установить возвращаемое значение.:
staff.should_receive(:companies).and_return([])
, который затем удостоверится, что:
@staff.companies << current_company
не потерпит неудачу с ужасной ошибкой nil (потому что есть и реальный, реальный массив для компании, в который нужно войти).
Но на самом деле лучшее, что можно сделать, это как предлагали предыдущие люди, и протестировать то, что вам действительно нужно протестировать - то есть, что спасение персонала в компаниях приведет к тому, что новая компания будет сохранена в БД.