3

Sinatra アプリでいくつかの rspec スペックを実行するのに問題があります。私はちょうど Ruby を学んでいるので、残念ながら本 (Paul Dix による Ruby on Rails のサービス指向設計) のコードで抱えている問題を解決するのに十分な知識がありません。

問題は、これらのテストが実際には実行されていないことです (私はそう思います)。アプリ ディレクトリから を実行$ ruby spec/service_spec.rbしましたが、テストが成功したか失敗したかはわかりません。ファイルからいくつかのログ メッセージを取得します/service.rbが、表示される出力はそれだけです。putsbefore ブロックと it ブロックが実行されていないことを示すために、いくつかの呼び出しを行いました (describe ブロックは実行されていますが)。

コードについて詳しく知りたい場合は、Github のリポジトリをチェックしてください。

/spec/service_spec.rb:

ENV['SINATRA_ENV'] = 'test'

require_relative '../service'
require 'rspec'
require 'rack/test'

RSpec.configure do |conf|
  conf.include Rack::Test::Methods
end

def app
  Sinatra::Application
end

describe "service" do
  puts 'describe 1'
  before(:each) do
    puts 'before 1'
    User.delete_all
  end

  describe "GET on /api/v1/users/:id" do
    puts 'describe 2'
    before(:each) do
      puts 'before 2'
      User.create(
        :name => "paul",
        :email => "paul@pauldix.net",
        :password => "strongpass",
        :bio => "rubyist")
    end

    it "should return a user by name" do
      puts 'it 1'
      get '/api/v1/users/paul'
      last_response.should be_ok
      attributes = JSON.parse(last_response.body)["user"]
      attributes["name"].should == "paul"
    end

    it "should return a 404 for a user that doesn't exist" do
      puts 'it 2'
      get '/api/v1/users/foo'
      last_response.status.should == 404
    end
  end
end

/service.rb:

require 'active_record'
require 'sinatra'
require_relative 'models/user'
require 'logger'

# log levels are DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
log = Logger.new(STDOUT)
log.level = Logger::DEBUG

# set up the environment
env_index = ARGV.index("-e")
env_arg = ARGV[env_index + 1] if env_index
env = env_arg || ENV["SINATRA_ENV"] || "development"
log.debug "env: #{env}"

# set up database connection
use ActiveRecord::ConnectionAdapters::ConnectionManagement
databases = YAML.load_file("config/database.yml")
ActiveRecord::Base.establish_connection(databases[env])
log.debug "#{databases[env]['database']} database connection established"

# HTTP entry points
# get a user by id
get '/api/v1/users/:name' do
    user = User.find_by_name(params[:name])
    if user
        user.to_json
    else
        error 404, { error: "user not found" }.to_json
    end
end

$ ruby​​ spec/service_spec.rb 出力:

D, [2013-03-16T17:05:58.275276 #17685] DEBUG -- : env: test
D, [2013-03-16T17:05:58.290885 #17685] DEBUG -- : db/test.sqlite3 database connection established
describe 1
describe 2

何か案は?ありがとう!

4

1 に答える 1

5

質問に対するコメントによると、これはファイルrspec --initを使用して RSpec をブートストラップするために実行することで修正されましたspec/spec_helper.rb

于 2013-03-17T00:12:06.413 に答える