我有一个简单的ember应用程序,我想测试它,而不需要为API调用服务器。
我环顾了一堆,发现这段代码非常有用。问题是测试我想使用夹具适配器(有道理,对吗?)
@store = Lfg.__container__.lookup('store:main')
这是我的模特:
Lfg.Activity = DS.Model.extend
title: DS.attr('string')
people: DS.attr('number')
maxPeople: DS.attr('number')
host: DS.attr('string')
然后在Em.run =>
里面我这样做
Lfg.reset()
container = new Ember.Container()
# These are my models... just one for now.
[
'activity'
].forEach (x,i) ->
container.register 'model:'+x, Lfg.get( Ember.String.classify(x) )
# It's essentially just: container.register("model:activity", Lfg.Activity)
@store = DS.Store.create
adapter: DS.FixtureAdapter.extend()
container: container
但我一直在使用序列化程序出错。我尝试添加序列化器但没有帮助。我还需要container.register
其他事情吗?
我得到的错误是TypeError: Cannot call method 'serialize' of undefined
来自mockJSON方法,更具体地说store.serializerFor(type)
返回null。
如果我通过store = Lfg.__container__.lookup('store:main')
然后store.serializerFor(Lfg.Activity)
设置商店,它似乎在控制台中正常工作 - 这不是同一个商店吗?我想用夹具适配器。我尝试设置序列化程序,但这没有帮助。
答案 0 :(得分:1)
我更喜欢使用类似mockjax的东西来模拟api端点,然后使用qunit和Ember提供的内置帮助器和qunit
以下是如何设置简单json响应的示例
$.mockjax({
url: '/colors',
dataType: 'json',
responseText: {
colors:[
{
id: 1,
color: "red"
},
{
id: 2,
color: "green"
},
{
id: 3,
color: "blue"
}
]
}
});
一个可以击中此终点的测试
test("root lists 3 colors", function(){
var store = App.__container__.lookup('store:main');
var colors = store.find('color');
stop();
colors.then(function(arr){
start();
equal(arr.get('length'), 3, 'store returns 3 records');
});
});