我正在使用ember-cli开发一个ember应用程序和ember-data,并通过对rails后端的REST调用。
还使用qunit进行测试。 (https://github.com/appendto/jquery-mockjax用于模拟AJAX请求)
在模拟AJAX请求时面临问题
import Ember from "ember";
import DS from "ember-data";
import { test, moduleFor } from 'ember-qunit';
import startApp from '../../helpers/start-app';
var App;
module('Integration Test', {
setup: function() {
App = startApp();
Ember.$.mockjax({
url: '/api/v1/offers/1',
type: 'GET',
responseText: {
offers: [{
id: 1,
state: 'draft'
}]
}
});
},
teardown: function() {
Ember.run(App, App.destroy);
}
});
test('small test', function () {
console.log("in")
$.get('/api/v1/offers/1')
console.log($.mockjax.mockedAjaxCalls().length);
console.log("start")
visit('/offers/1').then(function(){
equal($('p.item_count').text(), "Offer Items(0)");
});
console.log($.mockjax.mockedAjaxCalls().length);
});
在控制台上,它会将输出生成为
in
MOCK GET: /api/v1/offers
Object {url: "/api/v1/offers", type: "get", isLocal: false, global: true, processData: true…}
start
1
1
这里使用restful adapter调用API,但不使用模拟的AJAX调用。
如何解决此问题?
答案 0 :(得分:0)
使用mockjax进行通话时。我们需要确保以下事项:
Adaptera / application.js应该有
if(window.app.environment === "test") {
Adapter = DS.RESTAdapter.extend({ namespace: "ifany" });
}
使用Ember-Cli ember-data-factory-guy
是一个很好的选择,它也支持mockAjax
使用FactoryGuy.buildList("user", 9)
使用FactoryGuy,您可以轻松获得json响应,并且api调用也可以正常工作
$.mockjax({
url: '/api/v1/offers/1',
type: 'GET',
responseText: {
offers: Factory.buildList("offer",9)
}
});
还要确保以测试模式运行应用
ember server -environment=test