RSpec сначала читает контекст, затем читает до (: все). Зачем? - PullRequest
2 голосов
/ 18 января 2012

Моя среда:

jruby-1.5.3
Rails 2.3.8
RSpec 1.3.1
Windows 7 (64-bit machine)

Запуск Rspec со следующим исходным кодом, почему rspec читает строку, помеченную '=>', которая является контекстом перед оператором before(:each).Любая помощь высоко ценится

def save_env
  @host_os = Config::CONFIG['host_os']
end

def restore_env
  Config::CONFIG['host_os'] = @host_os
end

describe Manager::ManagerConfig do
  before(:each) do
    save_env
  end

  after(:each) do
    restore_env
  end

  context "Within Linus/Solaris environment" do
=>  Config::CONFIG['host_os'] = 'linux'

    it "should return the correct manager path under linux/solaris" do
      # bar
    end

    it "should return the correct license path under windows env" do
      # foo
    end
  end
end

1 Ответ

3 голосов
/ 18 января 2012

Контекст устанавливает внутренний класс, поэтому строки внутри него будут выполняться во время загрузки, за исключением того, что каждый it, before и after создает блок кода, который будет выполняться позже.

Все, что вам нужно сделать, это обернуть настройку конфигурации в отдельный блок before(:each), и порядок будет таким, как вы ожидаете: внешний before(:each), затем внутренний before(:each), затем it:

before(:each) do
  Config::CONFIG['host_os'] = 'linux'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...