Ember.js Konacha sinon.fakeServer没有做任何事情

时间:2013-06-19 12:58:18

标签: unit-testing ember.js sinon konacha

我已经设置了一个ember.js应用程序,我使用的是ember.js 1.0.0-rc4和ember-data 0.13,我试图用mocha设置konacha。 js与此https://github.com/dgeb/ember_data_example类似。

我的spec_helper.js

//= require konacha_config
//= require_tree ./templates
//= require application_test
//= require sinon
//= require spec_utils

// Sinon fake server
var server;

// Stub out Konacha.reset()
Konacha.reset = Ember.K;

// Prevent automatic scheduling of runloops. For tests, we
// want to have complete control of runloops.
Ember.testing = true;

// Defer App readiness (it will be advanced in each test below)
App.deferReadiness();

// Prevent the router from manipulating the browser's URL.
App.Router.reopen({location: 'none'});

beforeEach(function(done) {
  // Fake XHR
  server = sinon.fakeServer.create();

  Ember.run(function() {

    // Advance Contagion readiness, which was deferred above.
    App.advanceReadiness();

    // Setup is complete when the Contagion readiness promise resolves
    App.then(function() {
      done();
    });
  });
});

afterEach(function() {
  // Reset App state
  App.reset();

  // Restore XHR
  server.restore();
});

我的规格正在运行和传递,但在Chrome控制台中,我看到了像

这样的东西
x GET http://localhost:3500/posts 404 (Not Found)
x GET http://localhost:3500/comments 404 (Not Found)

为什么没有这个假冒服务器存在这些请求?

我尝过像

这样的事情
server.respondWith("GET", "/comments",
  [200, { "Content-Type": "application/json" },
   '{"commemnts":[{"id":1,"text":"Comment 1"},{"id":2,"text":"Comment 2"}]}'
]);

"/comments.json""http://localhost:3500/comments"http://localhost:3500/comments.json

的网址有所不同

似乎没什么用。

我还尝试使用sinon.stub(App.Comments,"find")删除查找方法,但我仍然看到404错误。

知道出了什么问题或者正确的方法来模拟/删除这些请求并返回有意义的json吗?

更新1

当我设置server.autoRespond = true时,我

  

未捕获错误:假XHR onreadystatechange处理程序引发异常:断言失败:您已打开测试模式,禁用了运行循环的自动运行。您需要在Ember.run中包含任何带有异步副作用的代码。

即使所有内容都包含在Ember.run中,也会发生这种情况。

server.respond()添加到a​​fterEach函数导致相同的Fake XHR onreadystatechange错误。

添加

Ember.run(function(){
  server.respond();
});

到afterEach函数让我回到方块1,带有404错误

1 个答案:

答案 0 :(得分:0)

您已将服务器设置为自动响应server.autoRespond = true;或触发服务器响应server.respond();。否则服务器会收到请求但不做任何事情。