首页 > 解决方案 > 带有方法调用的父路由的 Ember 测试

问题描述

我被带到了一个项目的“后端”,并被要求帮助为一个应用程序编写测试。我对 Ember 很陌生,需要一点帮助才能开始。我们正在尝试为路线提供单元测试,因此我们可以在应用程序上拥有更多的分子范围,而不是验收测试。我查看了一些教程,并经历了我能想到的每一个可能的场景。我只需要一点快速启动。

这是该路线的 route.js 的一部分。



export default Route.extend(ScrollTo, {
  flashMessages: service(),

  model: function(params) {
    let rec= this.store.peekRecord('contact', params.contact_id);
    return rec;
  },

  actions: {
    saveContact: function() {
      let model = this.currentRouteModel();
      model
        .save()
        .then(() => {
          //this.refresh();
          //this.setModelHash();
          this.flashMessages
            .success(`Saved Contact: ${model.get('title')}`);

          //this.transitionTo('contacts');
        });
    }

这是用于测试的预生成代码。我真的没有做任何修改,因为我真的不知道从哪里开始。

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';

module('Unit | Route | contact/show', function(hooks) {
  setupTest(hooks)

  test('it exists', function(assert) {
    var route = this.owner.lookup('route:contact/show');
    assert.ok(route, 'contact.show route works');
  });
});

标签: unit-testingtestingember.jsember-qunit

解决方案


当我第一次进行前端测试时,我也遇到了这个问题。凭借几年的经验,我有信心说您不应该以这种方式对路由对象进行单元测试。相反,ember 应用程序的测试应该集中在两种类型的测试上。

  1. ember 称为集成测试(但实际上更接近 UI 单元测试)
  2. 验收测试

对组件的集成测试可以让您了解更小的细节和边缘情况,它们可能非常有价值。

我认为在这种情况下你想要的实际上是一个验收测试

如果你的测试经验和我的一样,一开始你会觉得你测试了太多东西,但是浏览器实际加载整个应用程序的这些类型的测试在寻找错误方面最有价值,并且是最易于维护的。时间。


推荐阅读