2016-03-22 13 views
0

コントローラのmoments.jsを使用して日付の値を設定しています。私がいることを、テストを気にしない(「)瞬間を(」評価「)未定義の」関数ではありませんTypeError: '未定義'は関数ではありません( 'moment()'を評価しています)

TypeError例外を:私はそれに対してスペックを実行しようと実行しているときに、次のエラーを取得しますよ値が正しく設定されている場合は、テストを続行できるように日付の値を定義します。これを模倣する最良の方法は何ですか?私は関連する質問に示唆されているようにjasmine.clock()を使ってみましたが、テストはまだmoment()を評価しようとしています。理想的には、私はちょうど各テストの前にテスト目的のためにいくつかの任意の値にcontroller.dateを設定することができます。ここで

は、(設定されている日付は、コントローラの初期化時に呼び出された)私のコントローラのコードです:

function setDate() { 
    controller.date = { 
     startDate: moment().subtract(1, "days").hour(0).minute(0).second(0), 
     endDate: moment() 
    }; 
} 

EDIT:

ここでは、関連するコントローラのコードです:ここで

.controller('OrderListCtrl', function ($rootScope, $state, $stateParams, $uibModal, $q, orders, Orders, Product, Store, Payments, params) { 

     var controller = this; 

     // set default values for datepicker - beginning of yesterday until current time today 
     controller.setDate = function() { 
      controller.date = { 
       startDate: moment().subtract(1, "days").hour(0).minute(0).second(0), 
       endDate: moment() 
      }; 
     } 

     controller.setDate(); 
    }); 

は、関連する仕様ですコード:

describe("OrderController", function() { 

    var orderController, deferred, params, scope, state, stateParams, uibModal, q, controller, moment; 

    beforeEach(inject(function ($controller, $rootScope, $q, $uibModal) { 
     scope = $rootScope.$new(); 
     q = $q; 
     controller = $controller; 
     uibModal = $uibModal; 

     deferred = $q.defer(); 

     orderController = controller('OrderListCtrl', { 
      $rootScope: scope, 
      $state: state, 
      $stateParams: stateParams, 
      $uibModal: uibModal, 
      $q: q 
     }); 

     orderController.setDate = function() { 
      orderController.date = { 
      startDate: new Date('01/01/2016'), 
      endDate: new Date('01/02/2016') 
      } 
     } 

    })); 

このようにsetDate()メソッドをオーバーライドしようとすると、明らかに機能していませんが、「瞬間変数が見つかりません」というエラーが表示されます。

+0

'Date'オブジェクトと' moment'オブジェクトは2つの別個のものです。あるインスタンスで 'Date'オブジェクトを使用し、別のインスタンスで' moment'オブジェクトを使用しようとしているのはなぜですか? –

+0

あなたはbeforeEach(inject())に瞬間を注入しようとしましたか? – rrd

+0

[MVCE](http://stackoverflow.com/help/mcve)が本当に助けてくれるでしょう。 –

答えて

0

自分で使用する日付を選択するだけではありませんか?

function setDate() { 
    controller.date = { 
     startDate: new Date('01/01/2016'), 
     endDate: new Date('01/02/2016') 
    }; 
} 
+0

これを仕様で使用しようとすると、ピックアップされません。 –

+0

ああ、私はあなたの記事を間違って読んだ。それでは、コントローラを初期化した後、テストでdateプロパティを設定するだけではどうですか? – Austin

関連する問題