Question

J'ai une simple route dans mon application comme ceci:

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

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

Voici le test que j'ai écrite pour tester saveForm et de s'assurer qu'il est appelé:

...
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();
  });
});

Cependant, j'obtiens une erreur avec cette mise en œuvre:Attempted to wrap undefined property actions.saveForm as function

Si je change de route et c'est test comme ça, ça marchera:

// 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();
    }
  }
});

Le nouveau test:

  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();
  });

De cette façon, le test passe.Est-il possible de tester actions.saveForm directement?La limitation de sinon qui m'empêche d'accéder à des actions.saveForm?

Était-ce utile?

La solution

Vous pourriez moquer des actions de hachage et de définir attente pour elle de la sorte:

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

this.submitButton.click();

mock.verify();
mock.restore();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top