3

Rails 3.2.13 では、デフォルトでサブドメインが提供されます。そのため、マーチャントがサインアップすると、デフォルトで root_url サブドメイン「merchant」、つまりhttps://merchant.lvh.me:3000に移動するようにアプリケーションをテストしたいと思います。ただし、RSpecで同じことをテストするのに問題があります。私のテストは次のようになります。

  describe "Sign in" do
    before { visit signup_path }
    let(:submit) { "Sign up" }

    describe "with invalid information" do
        it "should not create a user" do
            expect { click_button submit }.not_to change(User, :count)
        end
    end

    describe "with valid information" do
        before do
            fill_in "Email", with: "user@gmail.com"
            fill_in "Password", with: "securepassword"
        end

        describe "as a merchant" do
            before { choose("Merchant") }

            it "should create a merchant user" do
                expect { click_button submit }.to change(User, :count).by(1)
            end

            describe "after creating the merchant user" do
                before do
            click_button submit
            request = ActionController::TestRequest.new(:host => "lvh.me:3000")
         end
                let(:merchant) { User.find_by_email('user@gmail.com') }

                expect (request.subdomain).to eq('merchant')
                it { should have_selector 'div.alert.alert-success', text: "Welcome to App!" }
                it { should have_link "Sign out", href: signout_path }
                it { should_not have_link "Sign in", href: signin_path }
                it { should have_content merchant.email }
          it { should have_selector "title", text: full_title(merchant.email) }
            end
        end

        describe "as a user" do
            before do
          choose("User")
          request = ActionController::TestRequest.new(:host => "lvh.me:3000")
        end

            it "should create a normal user" do
                expect { click_button submit }.to change(User, :count).by(1)
            end

            describe "after creating the normal user" do
                before { click_button submit }
                let(:user) { User.find_by_email('user@gmail.com') }

                expect (request.subdomain).to eq('user')
                it { should have_selector 'div.alert.alert-success', text: "Welcome to App!" }
                it { should have_link "Sign out", href: signout_path }
                it { should_not have_link "Sign in", href: signin_path }
          it { should have_content user.email }
          it { should have_selector "title", text: full_title(user.email) }
            end
        end
    end
  end

エラーは次のとおりです。

19:58:54 - INFO - Guard::RSpec is running, with RSpec 2!
19:58:54 - INFO - Running all specs
Running tests with args ["--drb", "-f", "progress", "-r", "/usr/local/lib/ruby/gems/1.9.1/gems/guard-rspec-1.2.1/lib/guard/rspec/formatters/notification_rspec.rb", "-f", "Guard::RSpec::Formatter::NotificationRSpec", "--out", "/dev/null", "--failure-exit-code", "2", "spec"]...
Exception encountered: #<NameError: undefined local variable or method `request' for #<Class:0x007fe0d8058848>>
backtrace:
/home/app/spec/requests/user_pages_spec.rb:46:in `block (5 levels) in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe'
/home/app/spec/requests/user_pages_spec.rb:39:in `block (4 levels) in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe'
/home/app/spec/requests/user_pages_spec.rb:32:in `block (3 levels) in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe'
/home/app/spec/requests/user_pages_spec.rb:26:in `block (2 levels) in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe'
/home/app/spec/requests/user_pages_spec.rb:16:in `block in <top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:224:in `describe'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/dsl.rb:18:in `describe'
/home/app/spec/requests/user_pages_spec.rb:3:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:245:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:245:in `block in load'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/local/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:245:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `block in load_spec_files'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `map'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/configuration.rb:780:in `load_spec_files'
/usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:22:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/test_framework/rspec.rb:11:in `run_tests'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:13:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/forker.rb:21:in `block in initialize'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/forker.rb:18:in `fork'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/forker.rb:18:in `initialize'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:9:in `new'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/run_strategy/forking.rb:9:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/spork-0.9.2/lib/spork/server.rb:48:in `run'
/usr/local/lib/ruby/1.9.1/drb/drb.rb:1548:in `perform_without_block'
/usr/local/lib/ruby/1.9.1/drb/drb.rb:1508:in `perform'
/usr/local/lib/ruby/1.9.1/drb/drb.rb:1586:in `block (2 levels) in main_loop'
/usr/local/lib/ruby/1.9.1/drb/drb.rb:1582:in `loop'
/usr/local/lib/ruby/1.9.1/drb/drb.rb:1582:in `block in main_loop'
Done.

リクエストオブジェクトを印刷して、何かあるかどうかを確認しようとしましたが、空白です。RSpec統合テストでリクエストオブジェクトにアクセスする方法、または統合テストはこの種の動作をテストするのに適した場所ですか? 提案してください。

編集: 詳細情報私のデータ モデルは、デフォルトですべてが通常のユーザーである単一のユーザー テーブルのみで構成されます。ただし、一部は商人でもあります。現在、誰かがユーザーとしてサインインすると (サインイン フォームのラジオ ボタンを使用して区別されます)、user.lvh.me にリダイレクトされ、マーチャントとしてサインインすると、merchant.lvh にリダイレクトされます。 。自分。これは、統合テストでテストしようとしているものです。

4

2 に答える 2

2

を使用してリクエストをモックできます

ActionController::TestRequest.new()

例えば

request = ActionController::TestRequest.new(:host => test_domain)
于 2013-04-23T05:28:37.073 に答える
0

ここでテストしようとしている動作がはっきりしません。

マーチャントがサインアップできるサインアップ フォームがあるようです。サインアップしたら、独自のサブドメイン (merchant1.lvh.me、merchant2.lvh.me) を取得する必要があります。そうですか?

それが正しければ、サインアップ要求のサブドメインを設定する必要があることをテストしようとしているようです。それがどのように機能するかはわかりません-クライアントは、サーバーではなくリクエストが行われるドメインを制御しています。あなたがしたいことは、適切なサブドミアンへのサインアップが成功した後にリダイレクトを実行することだと思います。したがって、応答がサブドメインにリダイレクトされていることをテストする必要があります。

于 2013-04-23T06:16:56.843 に答える