我正在为工作中的网站编写单元测试,我似乎无法弄清楚如何测试api调用。
假设我想在我的一个Vue组件中测试api调用
api.ajax("users")
.done((response) => {
stores.usersStore.init(response)
})
usersStore.js
let usersStore = {
store: {
users: []
},
get() {
return this.store
},
set(key, value) {
if (key) {
this.users[key] = value
} else {
console.error("Key required")
}
},
init(initObject) {
this.store.users = initObject
}
}
export default usersStore;
所以api调用基本上只是初始化用户数组。我如何在茉莉花中测试这样的东西?我试过间谍,嘲笑。
非常感谢任何投入!
编辑 - >我试图写的测试
describe(" Tests", function() {
var us;
beforeEach(function() {
us = new usersStore()
us.store.users.push("Anand Dharne")
});
describe("when retrieved by name", function() {
var u;
beforeEach(function(done) {
u = us.init(response, {
success: function () {
done();
}
});
});
it("api call", function() {
expect(u.store.users).toEqual("Anand Dharne");
});
});
});
答案 0 :(得分:0)
由于我不完全熟悉vue.js,我想使用普通的javascript,jQuery和amp;来分享一个简单的实现。茉莉花。 See it in action
var usersStore = {
store: {
users: []
},
get: function() {
return this.store;
},
set: function(key, value) {
if (key) {
this.store[key] = value;
} else {
console.error("Key required");
}
},
init: function(initObject) {
this.store.users = initObject;
}
};
var api = {
serviceCall: () => {
$.ajax('').done((data) => {
usersStore.init(data);
});
}
};
describe('test api call', () => {
it('ajax success', () => {
expect(true).toBe(true);
var userObj = [{
'name': 'StackOverflow'
}];
spyOn($, 'ajax').and.callFake((e) => {
return $.Deferred().resolve(userObj).promise();
});
api.serviceCall();
expect(usersStore.get().users[0].name).toEqual('StackOverflow');
});
});
注意事项:
this.users[key] = value
可能无效,因为users
无法直接使用,它是store