2

在Rails 3.2.13中,默认提供子域。因此,我想测试我的应用程序,以便当商家注册时,他默认默认为root_url,子域“商家”即https://merchant.lvh.me:3000。但是,我在RSpec中测试相同的麻烦。我的测试是这样的:如何访问rspec集成测试中的rails请求对象?

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: "[email protected]" 
      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('[email protected]') } 

       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('[email protected]') } 

       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 。我。这就是我在集成测试中要测试的内容。

回答

2

可以使用

ActionController::TestRequest.new() 

例如

request = ActionController::TestRequest.new(:host => test_domain) 
+0

嗨,我按照你的建议,但仍然得到相同的错误。请参阅我已经包含在问题本身中的日志。 – shailesh 2013-04-23 14:34:02

+0

因为我没有看到更多的答案来临,这是最接近的人去了,我接受它。但是如果有人能够更好地解释为什么我无法在集成测试中获得请求,那么可以接受。 – shailesh 2013-04-25 06:41:40

+0

为我完美工作,感谢发布 – 2014-06-13 06:55:31

0

我真不明白你正试图在这里测试什么行为嘲笑的请求。

看起来你有注册表单,商家可以注册。一旦他们注册,他们应该得到自己的子域(merchant1.lvh.me,merchant2.lvh.me)。是对的吗?

如果这是正确的,那么它看起来像你试图测试应注册请求的子域。我不认为它是如何工作的 - 客户端控制着请求发送给服务器的域。我怀疑你想要做的是在成功注册适当的小数位后执行重定向。因此,您要测试响应正在重定向到子域。

+0

嗨@Perryn福勒,我已经更新了这个问题。其实有两类用户 - 用户和商家。如果某人以用户身份登录,则应将其重定向到user.lvh.me,如果他以商家身份登录(在登录表单中使用单选按钮进行区分),则应将其重定向到merchant.lvh.me 。这就是我在集成测试中要测试的内容。 – shailesh 2013-04-23 14:21:34

相关问题