rSpec和Rails3中的Stubbing Devise

stu*_*rtc 34 rspec rspec2 ruby-on-rails-3

你将如何使用rSpec在Rails 3中创建Devise.我有一个UsersController和一个User模型.这两个都与Devise有关,我正在编写控制器规格,我真的很难实现我的期望,因为Devise sign_in正在干扰工作.

任何事都会有所帮助.

nat*_*vda 74

我发现现在很容易做到这一点.rspec2和设计存在问题,但现在已经解决了.我想你需要更新你的宝石.然后你就可以写了

require 'spec_helper'

describe DoStuffController do
  include Devise::TestHelpers

  before (:each) do
    @user = Factory.create(:user)
    sign_in @user
  end

  describe "GET 'index'" do
    it "should be successful" do
      get 'index'
      response.should be_success
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

[更新]在设计维基上,现在有一个详细的(可能是更新的)描述.

  • 正如对其他可能遇到此问题的人的说明.如果您使用确认,请确保您的工厂定义:confirmed_at或您传入. (7认同)
  • 在设计维基上有详细的描述:https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec) (2认同)
  • 不管在控制器测试中触摸数据库会很好...但有没有办法模拟这种行为而不是实际创建activerecord对象? (2认同)

小智 9

您可以尝试模拟设计依赖的底层warden(http://wiki.github.com/hassox/warden/)对象,这里有一些关于如何使用RSpec实现此目的的详细信息的链接:http:// www .michaelharrison.ws/weblog /?p = 349(条目也涵盖了其他一些主题,您想要的解决方案是在页面底部.)