0

Railsバージョン3.2.12を使用していますが、統合テストに問題があります(ユニットテストと機能テストは完全に機能しています)。

次のコマンドを使用して統合テストを作成しました。

rails generate integration_test user_stories

次に、「user_stories_test.rb」ファイルに次のようにデータを入力しました。

require 'test_helper'

class UserStoriesTest < ActionDispatch::IntegrationTest

  LineItem.delete_all
  Order.delete_all
  ruby_book = product(:ruby)

  get "/"
  assert_response :success
  assert_template "index"

  xml_http_request :post, '/line_items', product_id: ruby_book.id
  assert_response :success
  cart = Cart.find(session[:cart_id])
  assert_equal 1, cart.line_items.size
  assert_equal ruby_book, cart.line_items[0].product

  get "/orders/new"
  assert_response :success
  assert_template "new"

  post_via_redirect "/orders",
                    order: { name: "Dave Thomas",
                             address: "123 The Street",
                             email: "dave@example.com",
                             pay_type: "Check" }
  assert_response :success
  assert_template "index"
  cart = Cart.find(session[:cart_id])
  assert_equal 0, cart.line_items.size

  orders = Order.all
  assert_equal 1, orders.size
  order = orders[0]
  assert_equal "Dave Thomas", order.name
  assert_equal "123 The Street", order.address
  assert_equal "dave@example.com", order.email
  assert_equal "Check", order.pay_type
  assert_equal 1, order.line_items.size
  line_item = order.line_items[0]
  assert_equal ruby_book, line_item.product

  mail = ActionMailer::Base.deliveries.last
  assert_equal ["dave@example.com"], mail.to
  assert_equal 'Sam Ruby <depot@example.com>', mail[:from].value
  assert_equal "Pragmatic Store Order Confirmation", mail.subject

end

そして、それは私の「test_helber.rb」ファイルがどのように見えるかです:

ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  fixtures :all
end

まず、フィクスチャがロードされていませんでした。次手順に従ってこれを修正できなかったため、次のように手動でテストデータの作成を終了しました。

  #ruby_book = product(:ruby)

  ruby_book = Product.new
  ruby_book.title = 'Programming Ruby 2.0'
  ruby_book.price =  49.50
  ruby_book.image_url = 'ruby.png'
  ruby_book.description = 'description'
  ruby_book.save!

これにより、フィクスチャのロードに関する問題が解決され、「get」メソッドで「methodundefined」エラーが発生します。さらに、すべての「get」メソッドにコメントを付けた後、次のメソッド「xml_http_request」でも同じエラーが発生します。

私が間違っていることは何ですか?レールがこれらのメソッドを見つけられないのはなぜですか?

4

1 に答える 1

1

このコードを実行しているときは、テストのコンテキストではありません。

Test :: Unitケースは、次の形式になります。

require 'test_helper'

class UserStoriesTest < ActionDispatch::IntegrationTest
  def test_it_works_as_it_should  # <-- this is the part you're missing!
    # Your test code goes here
  end
end

テストのコードをクラスに配置するだけでは、Test::Unitがテストが正しく実行されることを期待するすべての適切なセットアップを実行するわけではありません。

Railsでのテストの詳細:http: //guides.rubyonrails.org/testing.html#integration-testing

于 2013-03-10T09:20:08.060 に答える