编程语言
首页 > 编程语言> > javascript-使用sinon和konacha测试ember.js中的动作

javascript-使用sinon和konacha测试ember.js中的动作

作者:互联网

我的应用程式中有一条简单的路线,例如:

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

但是,此实现出现错误:
尝试将未定义的属性action.saveForm包装为函数

如果我更改了路线并进行了这样的测试,那么它将起作用:

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

这样测试将通过.是否可以直接测试action.saveForm? sinon的限制是否阻止我访问actions.saveForm?

解决方法:

您可以像这样模拟动作哈希并为其设置期望值:

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

this.submitButton.click();

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

标签:ember-js,sinon,javascript,konacha
来源: https://codeday.me/bug/20191122/2058389.html