使用夹具在EmberJS和QUnit中进行数据测试

时间:2014-02-07 01:59:43

标签: testing ember.js qunit

我有一个简单的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)设置商店,它似乎在控制台中正常工作 - 这不是同一个商店吗?我想用夹具适配器。我尝试设置序列化程序,但这没有帮助。

1 个答案:

答案 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');
  });      
});

http://emberjs.jsbin.com/wipo/3/edit