0

私はジャスミンから喜びを得ていません。時計。私の期待は、コードが時計オブジェクトをモックアウトし、setTimeoutで指定された間隔を超えてティックを設定すると、setTimeoutイベントをトリガーすることですが、これは機能していないようで、欠陥を見つけることができません。私のコードは、同じクロック制御動作を適用している他のコードと並行しているようです。

背景:「callback」関数は、this.action.state()をConstants.state.Readyに設定します。実行後は、Constants.state.WAITINGにする必要があります。ノックアウトオブザーバブルを使用していることに注意してください。状態は、値を取得するためにfxとして呼び出されることになっています。

describe "Redis GET Action", () ->
  beforeEach () ->
    jasmine.Clock.useMock();
    this.getReturnValue = getReturnValue = "Some jasmine values from redis"
    clientStub = 
      get: (key,callback) ->
        if callback?
          setTimeout(callback(undefined, getReturnValue),1500)
      GET: (key,callback) ->
        if callback?
          setTimeout(callback(undefined, getReturnValue),1500)

    this.action = new RedisGetAction(
      client: clientStub
      key: "Standard"
      )


  it "should return a object", () ->
    expect(this.action).toEqual(jasmine.any(Object))

  requiredMethods = ['state','data','params'];

  requiredMethods.forEach (methodName) ->
    it "should have public "+methodName+" method", () ->
      expect(this.action[methodName]).toBeDefined();

  it "should initialize with public accessible state of #{Constants.state.WAITING}", () ->
    expect(this.action.state()).toEqual(Constants.state.WAITING)
    jasmine.Clock.tick(1501);
    expect(this.action.state()).toEqual(Constants.state.READY)

結果:失敗:

   1) should initialize with public accessible state of waiting
       Message:
         Expected 'ready' to equal 'waiting'.
       Stacktrace:
         Error: Expected 'ready' to equal 'waiting'.
4

2 に答える 2

0

これは私のスペックヘルパーにあります。問題を解決しますjasmine.getGlobal=function(){return GLOBAL; }

jasmine.getGlobal().setTimeout = function(funcToCall, millis) {
  if (jasmine.Clock.installed.setTimeout.apply) {
    return jasmine.Clock.installed.setTimeout.apply(this, arguments);
  } else {
    return jasmine.Clock.installed.setTimeout(funcToCall, millis);
  }
};

等々。jasmine.jsの4行すべて

于 2012-12-10T13:43:25.330 に答える
0

jasmine.Clock.defaultFakeTimer.setTimeout を明示的に使用すると、問題が解決されます (醜い)。

clientStub = 
  get: (key,callback) ->
    if callback?
      jasmine.Clock.defaultFakeTimer.setTimeout(callback(undefined, getReturnValue),1500)
于 2012-11-01T20:27:18.477 に答える