2013-06-07 2 views
8

Я столкнулся с ситуацией, которая, похоже, случается со многими пользователями Zeus и RSpec.Зевс бросает ошибки при запуске RSpec

Скажем, у меня есть следующие спецификации:

# spec/views/messages/show.html.erb 

require 'spec_helper' 

describe "messages/show.html.erb" do 
    it "displays the text attribute of the message" do 
    render 
    rendered.should contain("Hello world!") 
    end 
end 

и следующий шаблон представления, что он проверяет.

# app/views/messages/show.html.erb 

Hello world! 

My pwd является корнем приложения для рельсов. Когда я бегу rspec я получаю следующий ответ:

[email protected] $ rspec 
. 

Finished in 0.06264 seconds 
1 example, 0 failures 

Randomized with seed 9609 

Все выглядит хорошо. Если, однако, я запускаю тест с zeus rspec spec (zeus rspec не работает вообще) Я получаю следующий вывод.

[email protected] $ zeus rspec spec 
. 

Finished in 0.07292 seconds 
1 example, 0 failures 

Randomized with seed 0 

F 

Failures: 

    1) messages/show.html.erb displays the text attribute of the message 
    Failure/Error: render 
    NameError: 
     undefined local variable or method `render' for <RSpec::Core::ExampleGroup::Nested_2:0x936a0fc> 
    # ./spec/views/show.html.erb_spec.rb:5:in `block (2 levels) in <top (required)>' 
    # -e:1:in `<main>' 

Finished in 0.00041 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./spec/views/show.html.erb_spec.rb:4 # messages/show.html.erb displays the text attribute of the message 

Я видел несколько вопросов, подобных этому на SO, например, эти:

Zeus fails when testing with Rspec

zeus rspec fails include required files, but rspec alone does fine

Zeus + FactoryGirl::Syntax::Methods. undefined method `create'

Связующим является то, что решение предполагает комментирование выведите/удалите следующие строки из spec_helper.rb, если они существуют.

require 'rspec/autorun' 
require 'rspec/autotest' 

Моя проблема заключается в том, что эти линии не появляются в моем файле spec_helper.rb или где-либо еще в приложении.

После некоторого рытья я обнаружил, что оскорбительная строка была фактически выполнена в исполняемом скрипте в камне RSpec.

настоящее время я использую RSpec версии 2.13.1 и содержимое файла выглядит следующим образом:

#!/usr/bin/env ruby 

begin 
    require 'rspec/autorun' 
rescue LoadError 
    $stderr.puts <<-EOS 
#{'*'*50} 
    Could not find 'rspec/autorun' 

    This may happen if you're using rubygems as your package manager, but it is not 
    being required through some mechanism before executing the rspec command. 

    You may need to do one of the following in your shell: 

    # for bash/zsh 
    export RUBYOPT=rubygems 

    # for csh, etc. 
    set RUBYOPT=rubygems 

    For background, please see http://gist.github.com/54177. 
#{'*'*50} 
    EOS 
    exit(1) 
end 

Как явствует из документации RSpec, что это удобный метод, который будет запускать тесты для вас. Как ни странно, когда я комментирую раздел require 'rspec/autorun' раздела «начало/спасение», все еще имеет такое же поведение (бросая ошибку), но rspec больше не функционирует традиционным способом (просто запустив команду rspec). В соответствии с этой документацией (https://www.relishapp.com/rspec/rspec-core/docs/command-line) вы все равно можете запустить ее, только немного более подробно.

В любом случае, это намекает мне, что либо zeus либо полагается на файл, отличный от сценария exec rspec, либо проблема не совсем так же четко связана с запросами spec_helper.rb require (что rspec 2.13. 1 не добавляется в конфигурацию).

Неужели кто-нибудь забежал в эту ситуацию или спустился по этому пути?

Я не решаюсь бросить проблему на rspec-rails/rspec-core или zeus repos, так как я совсем не уверен, какая библиотека вызывает проблемы, для которых.

Любая помощь вообще была бы чрезвычайно оценена.

+0

У меня была аналогичная проблема, когда запуск определенной вспомогательной спецификации завершился бы неудачей только под zeus и только при запуске этого одного файла spec (не всех вспомогательных спецификаций). Ошибка заключалась в том, что помощник не смог найти метод, который был определен в ApplicationHelper. Я, наконец, запустил и добавил «require» application_helper »на верхнюю часть вспомогательной спецификации, которая, похоже, исправила ее. Имел ту же проблему с spork, а также с zeus, поэтому я не верю, что это специфический зев. – sockmonk

ответ

1

Согласно this, вы должны следовать правилам обозначения имен файлов при просмотре спецификаций. Попробуйте переименовать:

spec/views/messages/show.html.erb 

в

spec/views/messages/show.html.erb_spec.rb 

и это может помочь.