創建合同時,它將採用單位,用戶和折扣並使用這些參數項目(模型)生成發票。Rails應用程序正常工作正常,但不在rpsec測試中。 「零級」
一切工作正常在瀏覽器中。但是在運行規範時,我得到了undefined method 'value' for nil:NilClass [/app/models/option.rb:19:in 'get_from_database'
Option.rb的第18-20行。這是從數據庫獲取網站選項(由管理員配置)的模型。正常工作正常(瀏覽器測試)。
def self.get_from_database(name)
$option[name] = self.find_by_name(name).send('value')
end
而且它正在從Contract.rb稱爲:
def start_date=(date)
self[:start_date] = Date.strptime(date, Option.get_from_database('short_date'))
end
任何想法,爲什麼我得到這個錯誤?如果我註釋掉這一行並重新運行規範測試,我會從另一個類方法調用中獲得另一個nil:NilClass
錯誤。
我剛剛開始使用rspec工作,所以我確定我錯過了一些東西。注意:第一次測試有效,第二次測試不起作用。
require 'spec_helper'
module ContractSpecHelper
def contract_params
{ :start_date => "08/09/2012",
:client_id => '1',
:pay_interval_id => '1',
:billing_day => "1",
:prorated => '1',
:require_next => "1",
:include_today => "1",
:unit_id => '45',
:due => "1" }
end
end
describe 'Contract' do
include ContractSpecHelper
before :each do
@contract = Contract.new
end
describe '#new' do
it "requires a unit, user, and pay interval id" do
@contract.should_not be_valid
end
it "creates an invoice once saved" do
@contract.attributes = contract_params
@contract.save
@contract.should have(1).invoice
end
end
end
也許方法「價值」是由元編程創建和它在應用程序中正常工作,因爲方法是在應用程序中創建的,但是在rspec中它不會發生。所以要測試這個片段,你需要適當地設置環境。 – megas 2012-08-10 22:13:30
所以我應該'包括'所有相關的文件,如Option.rb,Invoice.rb,Unit.rb等?如果是這樣,那麼做這件事的最好方法是什麼?如果不是,那麼我應該如何正確設置環境? – 2012-08-10 22:48:06
顯然'find_by_name(name)'返回零。在你的程序中調用這個方法在哪裏?當名稱被調用時,「name」的值是多少?你的** test **數據庫中是否有這樣的對象? – jordanpg 2012-08-10 23:13:31