首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用sinon和konacha在ember.js中测试动作

用sinon和konacha在ember.js中测试动作
EN

Stack Overflow用户
提问于 2014-01-10 11:22:03
回答 1查看 1.5K关注 0票数 3

我的应用程序中有一个简单的route

代码语言:javascript
复制
Dash.PostsNewRoute = Em.Route.extend({
  model: function() {
    return this.store.createRecord('post');
  },

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

下面是我为测试saveForm并确保调用它而编写的测试:

代码语言:javascript
复制
...
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

如果我改变路线,像这样进行测试,它会起作用的:

代码语言:javascript
复制
// 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();
    }
  }
});

新的测试:

代码语言:javascript
复制
  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吗?sinon的限制是否妨碍了我访问actions.saveForm?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-04 20:14:22

您可以模拟操作、散列并设置期望,如下所示:

代码语言:javascript
复制
mock = sinon.mock(testHelper.lookup('controller', 'posts_new')._actions);
mock.expects('save').once();

this.submitButton.click();

mock.verify();
mock.restore();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21043038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档