0

契約が作成されると、ユニット、ユーザー、割引が適用され、それらのパラメーター項目(モデル)を使用して請求書が生成されます。

ブラウザではすべて正常に動作します。しかし、スペックを実行すると、私は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を使い始めたばかりなので、何かが足りないと確信しています。注:最初のテストは機能しますが、2番目のテストは機能しません。

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
4

1 に答える 1

1

問題Option.find_by_name(name)は、nil を返すことです。

これの最も可能性の高い原因は、テスト環境でオプション テーブルを設定していないことです。Option レコードが存在しないことを処理するようにコードを変更するか、fixtures/factory_girl/machineist/ をブロック (etc) の前に使用して、テスト環境でオプション レコードを作成します。

(他の質問に答えるには、環境を spec_helper にロードする必要があります。Rails モデルを rspec 仕様に手動で含める必要はありません。)

于 2012-08-10T23:20:57.093 に答える