在Ember控制器上进行单元测试计算属性



我的controllers/cart.js:

export default Ember.Controller.extend({
  cartTotal: Ember.computed('model.@each.subTotal', function() {
    return this.model.reduce(function(subTotal, product) {
      var total = subTotal + product.get('subTotal');
      return total;
    }, 0);
  })
)};

这个计算属性循环遍历模型中的所有元素,添加subTotal属性的所有值,返回cart total

cart-test.js

import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
moduleFor('controller:cart', {
  // Specify the other units that are required for this test.
  // needs: ['controller:foo']
});
test('it exists', function(assert) {
  var controller = this.subject();
  assert.ok(controller);
});
test('cartTotal function exists', function(assert) {
  var controller = this.subject();
  assert.equal(controller.get('cartTotal'), 30, 'The cart total function exists');
});

TypeError: Cannot read property 'reduce' of null测试失败,因为它显然没有一个模型来循环。

我如何模拟cartTotal computed属性的依赖关系以使测试通过?

谢谢!

可能是这样的?

import { moduleFor, test } from 'ember-qunit';
import Ember from 'ember';
var products = [
  Ember.Object.create({ name: 'shoe', subTotal: 10 }), 
  Ember.Object.create({ name: 'shirt', subTotal: 20 })];
var model = Ember.ArrayProxy.create({
  content: Ember.A(products)
});
moduleFor('controller:cart', {
  beforeEach() {
    this.controller = this.subject();
  }
});
test('cartTotal', function(assert) {
  this.controller.set('model', model);
  assert.equal(this.controller.get('cartTotal'), 30, 'The cart total function exists');
});

处理这个问题的一种方法是在beforeEach钩子中存根模型:

var sampleModel = [ // sample data that follows your actual model structure ]
moduleFor('controller:cart', {
  beforeEach() {
    this.controller = this.subject(); // allows you to access it in the tests without having to redefine it each time
    this.controller.set('model', sampleModel);
  }
});

相关内容

  • 没有找到相关文章

最新更新