我在 Rails 应用程序中做了一件有趣的事情,连接到不同的数据库以读取信息,但不写入信息。为了便于建立这些连接,我编写了模型来处理表格。我有两个类似的课程,所以这里有一个可以说明问题:
# call.rb
class Call < ActiveRecord::Base
# We don't want to change these values in the table, only read them
attr_reader :uniqueid, :queue, :agent_id, :codes, :code_count
def self.connect
establish_connection "ihs"
self.table_name = 'calls'
end
def self.disconnect
self.connection.close
end
end
我不希望此连接覆盖到 Rails 应用程序数据库的主连接,这只是暂时的。所以现在,我想测试这些连接是否在我调用这些方法时实际建立和关闭。目前,这是我想到的:
# call_spec.rb
describe Call do
[code omitted]
describe "#connect" do
# before { Call.disconnect }
it "establishes a connection to IHS DB" do
puts Call.count
lambda { Call.count }.should raise_error(ActiveRecord::StatementInvalid)
Call.connect
lambda { Call.count }.should_not raise_error
end
end
end
我已经使用 a 测试了这段代码begin ... rescue Exception => e; puts e.class; end
来验证抛出的异常类型,它确实是一个 ActiveRecord::StatementInvalid 异常,但是这个测试没有通过。我被抛出的错误如下:
Failure/Error: puts Call.count
ActiveRecord::StatementInvalid:
PG::Error: ERROR: relation "calls" does not exist
[rest omitted]
这是我期望得到的错误,我只是不知道如何调整测试才能通过。有小费吗?