我试图做一个基本的"它有效"测试一个与模型一起使用的Mixin。我假设单元测试Mixin的方法不应该在Mixin本身上进行,而是在混合了这个Mixin的通用Model类中进行。
假设这个第一个假设/策略是有道理的,那么这就是我尝试做的事情:
import DS from 'ember-data';
import Ember from 'ember';
import DictionaryManagerMixin from 'trainer/mixins/dictionary-manager';
module('DictionaryManagerMixin');
test('it works', function() {
var DictionaryManagerModel = DS.Model.extend(DictionaryManagerMixin, {
title: DS.attr('string')
});
var myStore = DS.Store.create();
var subject = myStore.createRecord(DictionaryManagerModel);
ok(subject);
});
这不起作用,给出以下错误:
TypeError: Cannot read property 'lookup' of undefined
at null.<anonymous> (http://localhost:4200/assets/vendor.js:95610:35)
at Descriptor.ComputedPropertyPrototype.get (http://localhost:4200/assets/vendor.js:28466:25)
at get (http://localhost:4200/assets/vendor.js:33944:21)
at Ember.Object.extend.adapterFor (http://localhost:4200/assets/vendor.js:97005:27)
at Ember.Object.extend._generateId (http://localhost:4200/assets/vendor.js:95682:28)
at Ember.Object.extend.createRecord (http://localhost:4200/assets/vendor.js:95654:32)
at Object.eval (trainer/tests/unit/mixins/dictionary-manager-test.js:17:28)
at Object.Test.run (http://localhost:4200/assets/test-support.js:2632:18)
at http://localhost:4200/assets/test-support.js:2719:10
at process (http://localhost:4200/assets/test-support.js:2435:24)
非常感谢任何帮助。
答案 0 :(得分:1)
通常lookup
需要一个容器,因此这暗示了我认为导致问题的原因。这是有道理的,因为DS
依靠容器来查找model:model-name
处注册的模型;
因此,您对此mixin的测试依赖性实际上是在正确设置Ember Data。因此,如果您进行了测试以使其适用于Ember Data模型,那么mixin或多或少只会随着对象的设置而落实到位。
我想尝试使用有用的Ember doc:
中的moduleForModel
moduleForModel('dictionary-manager-model');
test('your test here', function(assert) {
// this.subject aliases the createRecord method on the model
const dictionaryManagerModel = this.subject();
});
您是否需要有条件地使用模型滚动混合物?如果您的模型始终使用mixin,您可以在模型定义文件中执行此操作,并按上面所示进行测试。在你的例子中,mixin被添加到模型中,模型被传递给createRecord`但是不鼓励这样做:
https://github.com/emberjs/data/blob/v2.14.10/addon/-private/system/store.js#L351
assert(
已删除将类传递给存储方法。请传递一个dasherized字符串而不是$ {modelName} , typeof modelName === 'string');
,这就是为什么我们依赖于容器上的查找。
基本上,我认为你是在进行模型测试,而不是mixin测试。除非mixin能够融入某种不是模型的东西并且仍然有用。
ember generate model-test dictionary-manager-model
如果它还没有存在,那么你的模型文件已经混合了mixin。另外,也许这不是一个单独的混音?
希望这能让你开始朝着正确的方向前进,欢呼! ✌