2

最近、私は自分のアプリを構築するための最良、最速、最小のフレームワークを見つけるために、Ruby MVC に飛び込み始めました。Rails に満足できなかったので、Padrinoを試してみることにしました。また、完全なアプリのアウトサイドイン TDD を初めて試しているので、すべてのコンポーネントのテストを記述できることが重要です。残念ながら、私は Padrino でモデルを作成することから抜け出せないので、ベータ版ソフトウェアのせいなのか、それとも私のエラーなのか疑問に思っています。

テスト用に Cucumber と RSpec を使用し、ORM 用に Sequel を使用してプロジェクトを作成することから始めます。

$ padrino g project test -d sequel -t cucumber -c sass -b

次に、いくつかのモデルと移行を作成します。

$ padrino g model user

# ./db/migrate/001_create_users.rb
Sequel.migration do
  change do
    create_table :users do
      primary_key :id
      String :name
      String :password
    end
  end
end

次はもちろんスペックです。例として、単純なものを示します。

# ./spec/models/user_spec.rb
require 'spec_helper'

describe User do
  it 'can be created' do
    user = User.create
  end
end

次に、仕様を移行して実行します。

$ padrino rake sq:migrate:up
$ rspec spec

F

Failures:

  1) User can be created
     Failure/Error: user = User.create
     Sequel::DatabaseError:
       SQLite3::SQLException: no such table: users
     # ./spec/models/user_spec.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.00169 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:4 # User can be created

これは非常に紛らわしいです。この時点で、Padrino コンソールにアクセスすることがこの奇妙な問題の解決に役立つと考えました。私は間違っていた。

$ padrino c
> User.create
  => #<User @values={:id=>1, :name=>nil, :password=>nil}>
> User.all
  => [#<User @values={:id=>1, :name=>nil, :password=>nil}>]

十分な結果が得られますが、test環境で試してみます。

$ padrino c -e test
> User.create
  Sequel::DatabaseError: SQLite3::SQLException: no such table: users

RoR で統合モデルを実行するには、 のようなことをしなければならないことはわかっていますが、実行しても同等のものが明らかにrake db:test:prepareならpadrino rake -Tないようです (Sequel、DataMapper、および ActiveRecord でテストされていますが、どれも を持っていないようですdb:test:prepare)。私の質問は、どうすれば統合データベース テストを Padrino 内で実行できますか?

4

1 に答える 1

6

このフォーラムの投稿から、なぜ db:test:prepareこの奇妙で任意の rake タスクを実行する必要があるのか​​を発見しtestました。Padrino では、これは次のコードに変換されます。これはもう少しあいまいですが、より直感的でもあります。developmentproduction

$ padrino rake sq:migrate:up -e test

これにより、Padrino に test データベース用のテーブルを作成するように指示され、spec(s) が合格できるようになります。

于 2012-11-11T17:03:22.770 に答える