我刚刚开始使用茉莉花单元测试,并且在测试我的异步调用时遇到了一些麻烦。
我有一个我试图测试的ajax调用,我在控制台中尝试了它,所以我知道它的工作原理我想要它。我想我正在测试我在控制台中做的同样的事情,但可能是错的。
这是控制台:
> mg = new MandellMVC()
MandellMVC {getSessionId: function, setSessionId: function, isValidGetFunction: function, getURLPrefix: function, setURLPrefix: function…}
> mg.setUseLocalData(true);
true
> var log = new Log(73936780)
undefined
> log.setLogType('Proc')
true
> log.fetch(mg, function(){console.log('done');})
true
done
设置本地数据只是在向外部服务器发送http请求或从本地文件加载数据之间发生变化。
茉莉花测试代码在这里:
describe("Log Model", function() {
var mg = new MandellMVC();
mg.setUseLocalData(true);
var log;
beforeEach(function() {
log = new Log(73936780);
});
describe("function fetch", function() {
it("returns false if log type is invalid", function() {
expect(log.fetch(mg, function(){})).toBeFalsy();
});
// Not sure why this needs to be here too?
log = new Log(73936780);
log.setLogType('Proc');
it("should make a real ajax request", function() {
var callback = jasmine.createSpy();
log.fetch(mg, callback);
waitsFor(function() {
return callback.callCount > 0;
});
runs(function() {
expect(callback).toHaveBeenCalled();
});
});
});
});
第一次测试通过。但是第二个给出错误timeout: timed out after 5000 msec waiting for something to happen
。我试着按照教程,但显然不是很好。
谢谢,非常感谢任何帮助!
答案 0 :(得分:1)
我认为你混淆了log = new Log(73936780)
正确的代码应该是
describe("Log Model", function() {
var mg;
var log;
beforeEach(function() {
mg = new MandellMVC();
mg.setUseLocalData(true);
log = new Log(73936780);
log.setLogType('Proc');
});
afterEach(function() {
delete mg;
delete log;
});
describe("function fetch", function() {
it("returns false if log type is invalid", function() {
expect(log.fetch(mg, function(){})).toBeFalsy();
});
it("should make a real ajax request", function() {
var callback = jasmine.createSpy();
log.fetch(mg, callback);
waitsFor(function() {
return callback.callCount > 0;
});
runs(function() {
expect(callback).toHaveBeenCalled();
});
});
});
});
此外,如果发送请求并正确收到回复,您还应该检查firebug