RSpec的。 Rails 3.2。实例变量检查。行为测试

时间:2013-10-21 09:39:58

标签: ruby-on-rails ruby rspec devise capybara

我对RSpec测试有疑问。我正在使用FactoryGirl,Capybara 2. *并尝试测试我的网站行为。

测试场景: 用户点击sign_in按钮(设计控制器),他被重定向到root_path(由MyController管理)。在他的重定向之后,before_filter:setup_params应该分配给@app变量(在行动中:在MyController中的find_apps)一些值。我想确保@app不是nil并且已分配值。

这是我的sign_in_spec.rb

require "spec_helper.rb"
require "mymodel.rb"

describe MyContoller, :type => :feature do

  before do
    visit '/users/sign_in'
  end

  it "Shall redirect to user and ensure that @app is not nil" do

    user = FactoryGirl.build(:user_monit)
    fill_in "user[email]", with: user.email
    fill_in "user[password]", with: user.password

    #expect {click_button "Sign in"}.to change {@myapp}.from(nil)
    click_button "Sign in"

    get :find_apps
    assigns(:myapp).should_not be_nil

  end
end

需要我的spec_helper.rb中的部分

 require 'rspec/rails'
 require 'rspec/autorun'
 require 'capybara/rails'
 require 'capybara/rspec'
 require 'mocha/setup'
 require 'factory_girl'
 ....
 config.include RSpec::Rails::RequestExampleGroup, type: :feature

我有几个错误:

1) result should have changed, but is still nil
2) bad argument error for get :find_apps (ArgumentError: bad argument (expected URI object or URI string))

我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您必须先创建用户才能登录:

user = FactoryGirl.create(:user_monit)

第二个问题你可以解决添加普通的uri:find_apps和你在阻止之前做的一样