为什么我的测试在添加didInsertElement以在ember中获取json后失败了?

时间:2015-12-11 22:38:36

标签: javascript node.js ember.js

我有一个简单的组件,它会在插入组件后获取数据。在我进行测试之前一切正常。我收到了这个错误。

  

断言失败:您已打开测试模式,该模式禁用了运行循环的自动运行。您需要在运行

中包装具有异步副作用的任何代码

我知道组件是异步获取数据但我不确定如何在集成测试中解决这个问题。

这是我的代码

export default Ember.Component.extend({
  didInsertElement: function() {
    let source = this.get('source');
    let url = apiUrl + source;
    Ember.$.getJSON(url).then(function(response) {
      this.set('data', response.data);
    }.bind(this));
  },
  // something else
};

这是我的考验。

moduleForComponent('panel', 'Integration | Component | panel', {
  integration: true,
  beforeEach () {
    this.render(hbs`{{panel}}`);
  }
});

test('it has source dropdown', function(assert) {
  assert.equal(this.$('select[name="Source"]').length, 1);
});

没有提取数据位,测试运行正常。

2 个答案:

答案 0 :(得分:0)

尝试将getJSON包装在Ember运行循环中。

这样的事情:

public class Painter extends JPanel {
        private List<Gleis> gleisList = new ArrayList<>();
        private List<KnopfRot> knopfList = new ArrayList<>();

        //fügt ein neues Element der Liste gleisList hinzu
        public void addGleis(Gleis gleis) {
            gleisList.add(gleis);
        }

        public void addKnopfRot(KnopfRot knopf) {
            knopfList.add(knopf);
        }

        public void updateKnopfRot(KnopfRot knopf, int x, int y, int xpos, int ypos) {
            knopfList.remove(knopf);

            addKnopfRot(new KnopfRot(x, y, 0, true));
        }


        //paint-Methode geht jedes Element der Liste gleisList durch und führt die draw-Methode in Gleis.java aus
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            for (Gleis gleis : gleisList) {
                gleis.draw(g2);
            }
            for (KnopfRot knopf : knopfList) {
                knopf.draw(g2);
            }
       }
 }

答案 1 :(得分:0)

创建一个新的Promise,然后在成功处理程序中设置响应数据。

Em。$。getJSON和新Ember.RSVP.Promise返回的承诺是不同的。

let self = this;
let promise = new Ember.RSVP.Promise(function() { 
                  return Ember.$.getJSON(url);
                  });

promise.then((json) => {
  this.set('data', json);
});