слишком большой уровень стека (SystemStackError) - PullRequest
6 голосов
/ 31 марта 2012

У меня есть приложение Sinatra, и мне нужно протестировать мое приложение.

features / support / env.rb:

require_relative "../../application"

require "capybara"
require "capybara/cucumber"
require "rspec"

World do
  Capybara.app = Application

  include Capybara::DSL
  include RSpec::Matchers
end

features / one.feature:

Feature: Test homepage
  In order to make sure people can open my site
  I want to check it opened

  Scenario: Opening first page
    Given I have opened homepage    
    Then I should see site header

Проверьте это:

cucumber features\one.feature

Результат:

Feature: Test homepage
  In order to make sure people can open my site
  I want to check it opened

  Scenario: Opening first page    # features\one.feature:5
    Given I have opened homepage  # features\one.feature:6
    Then I should see site header # features\one.feature:7

1 scenario (1 undefined)
2 steps (2 undefined)
0m0.006s

You can implement step definitions for undefined steps with these snippets:

Given /^I have opened homepage$/ do
  pending # express the regexp above with the code you wish you had
end

Then /^I should see site header$/ do
  pending # express the regexp above with the code you wish you had
end

Ну, я создал features / step_definitions / повестки дня.rb:

Given /^I have opened homepage$/ do
  pending # express the regexp above with the code you wish you had
end

Then /^I should see site header$/ do
  pending # express the regexp above with the code you wish you had
end

Проверьте это:

cucumber features\one.feature

Результат:

Feature: Test homepage
  In order to make sure people can open my site
  I want to check it opened

  Scenario: Opening first page    # features\one.feature:5
    Given I have opened homepage  # features/step_definitions/agenda_steps.rb:1
C:/Ruby193/bin/cucumber:19: stack level too deep (SystemStackError)

Почему и как это можно исправить?

Обновлено: Проблема исчезла, если я переписал свой env.rb следующим образом:

require_relative "../../application"

require "capybara"
require "capybara/cucumber"
require "rspec"


Capybara.app = Application
#World do
#  Capybara.app = Application
# 
#  include Capybara::DSL
#  include RSpec::Matchers
#end

Ответы [ 2 ]

1 голос
/ 02 января 2013

я получаю ту же ошибку, похожую на ошибку .. как

stack level too deep (SystemStackError)
/usr/local/rvm/gems/ruby-1.9.2-p290/gems/cucumber-1.1.4/lib/cucumber/core_ext/instance_exec.rb:73..

я добавил require 'cucumber/rails' в первую строку env.rb ... которая загружается первой.

Теперь я больше не сталкиваюсь с этой ошибкой.

0 голосов
/ 18 ноября 2012

Я считаю, что только Capybara.app = Application не должно быть объявлено внутри World, как показано в вашем примере.

Так вот моя работа env.rb :

ENV['RACK_ENV'] = 'test'
require File.join(File.dirname(__FILE__), '..', '..', 'rvs.rb')

require 'capybara'
require 'capybara/cucumber'
require 'rspec'
require 'r18n-core'

Capybara.app = RVS

class RVSWorld
  include R18n::Helpers
  include Capybara::DSL
  include RSpec::Expectations
  include RSpec::Matchers
end

World do
  RVSWorld.new
end

Как видите, класс RVSWorld содержит только операторы, которые включают необходимые модули.

...