2

"rake test:functionals" を実行するとテストが失敗しますが、自動テストを使用すると一貫して合格します。

問題の失敗したテストは、rake を使用しているときに Authlogic がユーザーを適切にログインしていないことに関連しているようです。

テストでユーザーのサインインを容易にするために、次のようなテスト ヘルパー メソッドがあります。

class ActionController::TestCase
  def signin(user, role = nil)
    activate_authlogic
    UserSession.create(user)
    user.has_role!(role) if role
  end
end

上記のメソッドは、ユーザーのサインインに使用されます

私のスタックは shoulda/authlogic/acl9/factory_girl/mocha です

Authlogic が問題であると私が疑う理由は、失敗したテストが次のようになっているためです。

     54) Failure:
test: A logged in user PUT :update with valid data should redirect to user profile. (UsersControllerTest)
    [/var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:202:in `__bind_1251895098_871629'
     /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
     /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: A logged in user PUT :update with valid data should redirect to user profile. ']:
Expected response to be a redirect to <http://test.host/users/92> but was a redirect to <http://test.host/signin>.

 55) Failure:
test: A logged in user PUT :update with valid data should set the flash to /updated successfully/i. (UsersControllerTest)
    [/var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/assertions.rb:55:in `assert_accepts'
     /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/action_controller/macros.rb:41:in `__bind_1251895098_935749'
     /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `call'
     /var/lib/gems/1.8/gems/thoughtbot-shoulda-2.10.2/lib/shoulda/context.rb:351:in `test: A logged in user PUT :update with valid data should set the flash to /updated successfully/i. ']:
Expected the flash to be set to /updated successfully/i, but was {:error=>"You must be signed in to access this page"}
4

3 に答える 3

2

Autotest はすべてのテスト ファイルを事前に読み取ります (RSpec ではそうします。私は長い間単純なテストを使用していないので、間違っている可能性があります)。

コントローラーを適切にテストするには、setUp メソッドで activate_authlogic を呼び出す必要があります。これはおそらく、統合テストのために自動的に (グローバルに) 行われます。

autotest はすべてのテストを読み取るため、このグローバル セットアップを実行し、機能テストに合格します。機能テストのみを実行すると、authlogic が有効にならず、テストが失敗します。

于 2009-09-11T10:09:40.410 に答える
1

どこに問題があるのか​​わかりませんが、単体テスト/rspec の代わりに、コントローラーとユーザー操作のテストに Cucumber を使用することをお勧めします。その理由は、所有している認証コードと承認コードを含め、アプリ全体を実行するためです。

于 2009-09-11T09:54:59.367 に答える
0

明らかに、ユーザーはログインしていません。Bragi Ragnarson が何かに取り組んでいるようです。

問題を特定するためのその他の事項を次に示します。

  • テストが不完全であるか、自動テストの副作用に依存しているかどうかを理解します。テストを単独で実行します。

    ルビテスト/機能/users_controllers_test.rb

  • おそらくそれはうまくいきません。そうでない場合は、自動テストによって非機能テストのために呼び出されているグローバル コードがいくつかあります。おそらく、test/integration または test/units ディレクトリのコード設定か、そこに必要なものの 1 つです。

于 2009-09-12T12:08:21.127 に答える