0

我在我的管理模型中使用设计,如下所示:

class Admin < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
end

从功能上讲,这工作正常。但是我想为我的 Admin 类制定规范,所以我开始编写规范......

require 'spec_helper'
require 'admin'

describe Admin do
  it 'mumblemumble' do ... end
end

...然后当我运行规范时,它爆炸了:

active_record/dynamic_matchers.rb:22:in `method_missing': undefined method `devise' for Admin(Table doesn't exist):Class (NoMethodError)

我如何要求设计以便在我的规范中可用?看来我应该能够

require 'devise'

在我的规范或我的模型(最好是我的模型)中,但这并不能解决问题或更改我的堆栈跟踪。我如何要求设计以便我的模型具有可用的辅助方法?我正在探索设计宝石,但没有找到任何线索。

4

4 回答 4

1

是的,您的测试数据库似乎没有该admins表。尝试这个:

bundle exec rake db:migrate db:test:prepare

db:migrate迁移您的开发数据库,​​如果有任何挂起的迁移,并db:test:prepare根据开发克隆您的测试数据库。

于 2013-11-11T23:30:08.887 回答
1

你是如何运行这些的?直接RSpec?或者bundle exec rake spec

你的错误中有这个:for Admin(Table doesn't exist)这让我想知道你是否有一个数据库。rake 任务应该负责为您设置您的世界。

如果这没有帮助,spec_helper.rb也发布您的内容。

这是我拥有的基本管理模型:

class Admin < ActiveRecord::Base
  devise :database_authenticatable, :recoverable, :rememberable,
         :trackable, :validatable
end

还有一个基本规格:

require 'spec_helper'

describe Admin do
  it { should validate_uniqueness_of(:email) }
end

与 vanilla 生成的 rails 应用程序和生成的设计设置一起使用非常好。

于 2013-11-11T19:35:27.737 回答
1

这个错误

undefined method `devise' for Admin(Table doesn't exist):Class (NoMethodError)

似乎是您在数据库中没有表?您是否迁移了 rake 文件?

于 2013-11-11T19:47:45.517 回答
0

知道了。我使用 sqlite3 的内存实例运行规范,所以所有这些db:test:prepare都不适用于我。除了需要 Devise 之外,它还必须是setup/configured.

所以在/spec/support/devise.rb

require 'devise'

Devise.setup do |config|
  require 'devise/orm/active_record'
end

然后在 spec_helper.rb 中:

Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
于 2013-11-11T23:53:45.420 回答