3

在 Rails 3.2.13 中,默认提供子域。因此,我想测试我的应用程序,以便当商家注册时,他默认使用子域“商家”的 root_url,即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,如果他以商家身份登录,他应该被重定向到 Mercer.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)。那正确吗?

如果这是正确的,那么您似乎正在尝试测试是否应设置注册请求的子域。我不认为它是这样工作的——客户端控制着向服务器发出请求的域。我怀疑您想要做的是在成功注册到适当的 subdomian 后执行重定向。因此,您要测试响应是否重定向到子域。

于 2013-04-23T06:16:56.843 回答