문제

나는 간단한 route 내 앱에서는 다음과 같습니다.

Dash.PostsNewRoute = Em.Route.extend({
  model: function() {
    return this.store.createRecord('post');
  },

  actions: {
    saveForm: function() {
      this.modelFor('postsNew').save();
    }
  }
});

테스트하기 위해 작성한 테스트는 다음과 같습니다. saveForm 호출되었는지 확인하세요.

...
context('create new post', function() {
  beforeEach(function() {
    ...
  });

  it('calls submit on route', function() {
    var mock;
    mock = sinon.mock(testHelper.lookup('route', 'posts.new'));
    mock.expects('actions.saveForm').once();

    this.submitButton.click();

    mock.verify();
    mock.restore();
  });
});

그러나 이 구현에서는 오류가 발생합니다.Attempted to wrap undefined property actions.saveForm as function

경로를 변경하고 다음과 같이 테스트하면 작동합니다.

// Moving the save out of action and call it
Dash.PostsNewRoute = Em.Route.extend({
  model: function() {
    this.store.createRecord('post');
  },

  save: function() {
    this.modelFor('postsNew').save()
  },

  actions: {
    saveForm: function() {
      this.save();
    }
  }
});

새로운 테스트:

  it('calls submit on route', function() {
    var mock;
    mock = sinon.mock(testHelper.lookup('route', 'posts.new'));
    mock.expects('save').once();

    this.submitButton.click();

    mock.verify();
    mock.restore();
  });

이렇게 하면 테스트가 통과됩니다.테스트가 가능한가요? actions.saveForm 곧장?actions.saveForm에 액세스하지 못하게 하는 sinon의 제한이 있습니까?

도움이 되었습니까?

해결책

다음과 같이 작업 해시를 조롱하고 이에 대한 기대치를 설정할 수 있습니다.

mock = sinon.mock(testHelper.lookup('controller', 'posts_new')._actions);
mock.expects('save').once();

this.submitButton.click();

mock.verify();
mock.restore();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top