RSpec: 未初始化常量ActiveRecord (NameError)

5
当我在我的Rails项目根目录下运行rspec命令时,会出现以下错误:
/Users/ysername/code/fsf/app/models/school_application.rb:3:in `<top (required)>': uninitialized constant ActiveRecord (NameError)

这是由我的spec_helper.rb文件中的require_relative调用触发的测试。

以下是我的测试:

require 'spec_helper'

describe '#to_xml' do
  it 'returns the xml-ified version of a payment' do
    expect(SchoolApplication.to_xml(XXXXXXXXXXXXXXXX,10, 400, "bob").to eq("<txn>   <ssl_merchant_id>5</ssl_merchant_id><ssl_user_id>3</ssl_user_id><ssl_test_mode>false</ssl_test_mode><ssl_card_number>2443444433334444</ssl_card_number><ssl_amount>400</ssl_amount><ssl_ssl_cvv2cvc2_indicator>1</ssl_cvv2cvc2_indicator><ssl_first_name>'bob'</ssl_first_name></txn>"))
  end
end

这是我的spec_helper.rb文件。
require 'rubygems'
ENV["RAILS_ENV"] ||= 'test'
require_relative("../app/models/school_application") 

请注意,当我删除require_relative语句时,它将不再知道SchoolApplication是什么。对于这里发生的事情,我并不确定。我已经查看了其他线程,但我对他们的解决方案/问题如何与我的相符感到困惑(例如,在我的/lib/目录中有另一个Active_Record的副本?)感谢!这是引发错误的文件:school_application.rb
require 'builder'

class SchoolApplication < ActiveRecord::Base
   def self.to_xml(number,expiration,cvv,amount, name)
     xml = ::Builder::XmlMarkup.new
     xml.txn {
       xml.ssl_merchant_id 5
       xml.ssl_user_id 3
       xml.ssl_ssl_pin 1434
       xml.ssl_test_mode false  
       xml.ssl_card_number number
       xml.ssl_amount amount
       xml.ssl_cvv2cvc2_indicator cvv
       xml.ssl_first_name name
     }
     xml
   end
end

PS:不用担心,所有支付凭证都是虚构的。


2
请注意...:这真的是为了我(或任何其他阅读此问题的用户)吗?难道不是为了你从别人那里获得帮助吗? - sawa
1个回答

6

您的spec_helper没有加载Rails环境。尝试引用环境:

require 'rubygems'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)

当设置正确时,你的模型会自动加载,所以你可以删除require_relative这一行。

如果你安装了rspec-rails gem,你也可以生成一个新的spec_helper.rb文件:

rails generate rspec:install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接