Я пытаюсь проверить приложение Голиаф + виноградный вроде следующего:Тестирование Голиаф + Grape с Rspec
require 'em-synchrony/em-mongo'
require 'yajl/json_gem'
require 'goliath'
require 'grape'
class API < Grape::API
version 'v1', :using => :path
format :json
resource 'categories' do
# http://0.0.0.0:9000/v1/categories/
get "/" do
coll = env.mongo.collection('categories') #Connection Pool from Goliath ENV
coll.find({})
end
end
end
class App < Goliath::API
def response(env)
API.call(env)
end
end
эти два класса находятся в одном файле под названием app.rb. Запуск ruby ./app.rb -sv
запустил приложение goliath на http://0.0.0.0:9000/v1/categories/
, которое отлично работает, но требует rspec перед тем, как создавать более сложные конечные точки. Во всяком случае запуска спецификации я получаю
неопределенными локальная переменная или метод `приложение»
, который я не могу избавиться:
$ bundle exec rspec spec/api_spec.rb
FFFF
Failures:
1) App App GET /v1/categories get several categories of repositories by name
Failure/Error: get "/v1/categories"
NameError:
undefined local variable or method `app' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_1:0x993eec4>
# ./spec/api_spec.rb:9:in `block (4 levels) in <top (required)>'
api_spec выглядит следующим образом:
require 'spec_helper'
describe App do
include Rack::Test::Methods
describe App do
describe 'GET /v1/categories' do
it 'get several categories of repositories by name' do
get "/v1/categories"
last_response.status.should == 200
JSON.parse(last_response.body)["name"].should == "Ruby Web Frameworks"
end
end
end
end
UPDATE:
добавив метод приложение к спецификации/api_spec.rb:
def app
App
end
нарастания другой вид ошибки:
1) App App GET /v1/categories get several categories of repositories by name
Failure/Error: get "/v1/categories"
NoMethodError:
undefined method `call' for App:Class
# ./spec/api_spec.rb:13:in `block (4 levels) in <top (required)>'
UPDATE
добавления класса API вызывается из метода приложения в спецификации/api_spec. rb:
def app
API
end
получить undefined method
mongo'`:
Failures:
1) App App GET /v1/categories get several categories of repositories by name
Failure/Error: get "/v1/categories"
NoMethodError:
undefined method `mongo' for #<Hash:0xad5ea58>
# ./app.rb:14:in `block (2 levels) in <class:API>'
# ./spec/api_spec.rb:13:in `block (4 levels) in <top (required)>'
см coll = env.mongo.collection('categories')
внутри класса API
не работает, см UPDATE на главном Q. –
я ничего не знаю Голиафа. Но кажется, что это должно сработать, если вы используете API-класс вместо App –
сейчас я получаю неопределенный метод 'mongo ', см. Последний UPDATE –