1

オブジェクトを RequireJs でインスタンス化する方法について少し混乱しています。すべてのオブジェクトを型付き関数として定義する coffeescript クラスを使用していますか? (正しい用語についてはわかりません)

現在、自分のオブジェクトに依存性注入を使用しています。ビューモデルとサービスの例を次に示します。

オプション配列を介して、コンストラクターのビュー モデルにサービスを挿入します

define 'myViewModel', [ 'jquery', 'sammy' ], ( $, sammy ) ->
  class myViewModel
    constructor: ( options ) ->
      self = @
      @service = options.service

      @router = sammy( -> 
        @get( '/SomeRoute#:id', self.onHashUpdated )
      )
      @router.run()

ここで、alertId をサービスに挿入します

define 'myService', ['baseService'], ( baseService ) ->
  class myService extends baseService
    constructor: ( options ) ->
      @alertId = options.alertId
      super()    

これが私の高レベルのページオブジェクトです。ビュー モデルのインスタンス化を行い、必要なすべての依存関係をビュー モデルに挿入します。

require [ 'myViewModel', 'myService', 'domReady!' ], ( viewModel, service ) ->
  myViewModelInstance = new viewModel
    service: new service
      alertId: 'some-alert-id'

これが私がそれを行うべきかどうか、またはサービス定義から新しいサービスを返してシングルトンにする必要があるかどうかはわかりません。

、 、 などの他のすべての依存関係はすべてこのようjqueryに機能し、私のオブジェクトのようにインスタンス化する必要がある型ではなく、作業オブジェクトを返します。sammyknockoutrequire

requireJsを使用するための受け入れられたパターンはありますか?

依存性注入またはサービスの場所を行う必要がありますか?


これにより、javascript をテストし、requireJs をオーバーライドして、実際の依存関係の代わりにモック オブジェクトを返すことができるライブラリを見つけることにつながります。

ジャスミンでは、このようなものがあるかもしれません

describe '=== my view model ===', ->
  sut = null

  beforeEach ->
    require ['myViewModel', 'mockService'], ( viewModel, mockService ) ->
      sut = new viewModel
        service: new mockService

私はtestrを試してみましたが、ドキュメントはひどいものであり、使用方法の完全な例は実際にはありません。

SquireJsは、この種のことにも可能性があるように見えますか?

4

1 に答える 1

0

私は次のことを行って、各オブジェクトに独自の依存関係をインスタンス化させました

define 'myService', ['baseService', 'alert'], ( baseService, alert ) ->
  class myService extends baseService
    constructor: ( options ) ->
      super()
      @alertId = new alert

次に、モジュールをテストするときに、squire js を使用して sinon js モックを注入します。

于 2013-07-17T12:24:52.793 に答える