В сообщении говорится, что ваш двойник получил сообщение []=
с аргументами :cart_id
и 123
, но не ожидал этого.
Давайте применим некоторую базовую логику.Проблема в том, что
- получает сообщение
- , которое не ожидалось
Итак, есть две вещи, которые вы можете сделать, чтобы избавиться отсообщение:
- не отправлять сообщение ИЛИ
- сообщить двойнику, что следует ожидать сообщения
Первый способ прост: просто удалите строку 14, в которой написаноsession[:cart_id] = current_cart.id
, так как это единственное место, куда вы звоните []=
.Тем не менее, я не думаю, что это то, что вы хотите сделать.
Номер два также легко.Существует метод с именем expect
, который позволяет вам указать двойное число, чтобы ожидать определенного сообщения.Итак, все, что нам нужно сделать, это настроить ожидание.
Хорошие сообщения об ошибках действительно важны в среде тестирования, и, к счастью, RSpec имеет хорошие сообщения об ошибках.В сообщении об ошибке должно быть указано, как двигаться дальше с вашими тестами, а в сообщении, которое вы цитировали, содержится вся необходимая нам информация:
- имя двойника, вызвавшего ошибку (
session
) - имя неожиданного сообщения, вызвавшего сбой (
[]=
) - и даже аргументы, которые были переданы сообщению (
:cart_id
и 123
)
Все, что нам нужно сделать, это, даже не задумываясь об этом, буквально просто скопировать и вставить эту информацию:
expect(session).to receive(:[]=).with(:cart_id, 123)
Или, если мы хотим, чтобы наши тесты были немного менее хрупкими и не имели жесткого кода123
, мы также можем сделать что-то вроде этого:
expect(session).to receive(:[]=).with(:cart_id, instance_of(Integer))