Как ожидать, что метод '=' выполняется для 'сеанса'? - PullRequest
3 голосов
/ 30 сентября 2011

Я использую Ruby on Rails 3.1.0 и гем rspec-rails 2.Я хотел бы проверить, были ли некоторые session данные установлены на nil.

В моем контроллере у меня есть:

def create
  ...
  session[:user] = nil
  ...
end

В связанном файле спецификаций, который я хотел бы сделатьчто-то вроде следующего:

it "should be set to nil" do
  # Here I would like to expect if the 'session[:user]' is set to 'nil'
  # NOT using this approach:
  #
  #   session[:user].should be_nil
  #
  # That is, I would be sure that the 'session[:user] = nil' runs the same way
  # I may do with method "expectation". For example:
  #
  #   mock_model(User).should_receive(:find).and_return(nil)
  #
  # Maybe a solution can be similar to this (note: of course, the following
  # doesn't work):
  #
  #   session[:user].should_receive(:"=").and_return(nil)

  post :create, { ... }, { ... }

  ...
end

Возможно ли это?Если да, то как?

PS : Я хотел бы использовать этот подход для проверки определенного внутреннего поведения.


ОБНОВЛЕНИЕ ... и как я могу проверить следующее?

session[:user][:nested_key] = nil

1 Ответ

3 голосов
/ 30 сентября 2011

Метод, который вы ищете: []=:

session.should_receive(:[]=).with(:user, nil)

Однако это кажется мне действительно агрессивным. Не то чтобы я никогда этого не делал, но я бы спросил, почему вы не хотите просто проверить результат?

session[:user] = 37
post :create # ...
session[:user].should be_nil
...