在 PhantomJS/Sinon 中存入 Promise
Stub a Promise in PhantomJS/Sinon
我在 jquery 中有一个 class 调用服务和 return 一个承诺,然后通过 .done
在我的主要区域执行,我正在尝试将该调用包装在另一个 class 中,我将确保不会对同一 ID 进行多次调用。但是我发现这很难测试,因为我无法准确地得到在 phantomJS/Sinon 中工作的承诺。这是我要测试的区域
LOCKER.execute(diagRunId, function (unlock) {
SERVICE_ACCESSOR.makeCall params)
.done(function (data) {
console.log("Success!");
unlock();
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log("Failed!");
unlock();
});
});
并且在我的测试文件中我有我的 setup
这样的
var setup = function() {
P.mock('service-accessor', function () {
return {
makeCall: sinon.stub().returns({})
};
});
P.mock('locker', function () {
var methods = {
execute: function (lockId, wrapped) {
console.log('locked - ' + lockId)
wrapped()
},
unlock: sinon.stub()
};
return {
execute: methods.execute,
unlock: methods.unlock
};
});
P.start();
}
最后测试只是调用方法
aui.suite('Locker Test', function () {
aui.test('should lock and then unlock', testFile, {
setup: setup,
browser: function () {
P.when('utils', 'service-accessor','locker').execute(
'test', function (SERVICE_ACCESSOR, LOCKER) {
UTILS.makeCall("Identifier")
expect(LOCKER.unlock).to.have.been.called.once;
done();
}
);
},
validate: function () {},
});
});
储物柜工作并开始执行服务调用,但随后服务调用失败
Error: PhantomJS: `TypeError: 'undefined' is not a function (evaluating 'SERVICE_ACCESSOR.callService( params).done')` near
L2492> }).fail(function (jqXHR, textStatus, errorThrown) {
根据我的理解,我的模拟在被调用时应该 return 只是一个空对象,但后来我不明白 a) 为什么它会失败以及 b) 什么是未定义的?我的假设是,这是因为我没有 returning 三个对象,但我试图让它先成功!我怎样才能正确stub/mock这个?
最后我没有承诺,也没有使用存根。我使用了以下函数来代替调用 done
和 fail
。
function() {
return { done: function(callback) {
if(window.makeParamountCallSuccess) {
callback({"data": "data"});
return {
fail: function(){}
}
} else {
return {
fail: function(failCallback){ failCallback("jqXHR", "textStatus", "errorThrown")}
}
}
}
}
}```
我在 jquery 中有一个 class 调用服务和 return 一个承诺,然后通过 .done
在我的主要区域执行,我正在尝试将该调用包装在另一个 class 中,我将确保不会对同一 ID 进行多次调用。但是我发现这很难测试,因为我无法准确地得到在 phantomJS/Sinon 中工作的承诺。这是我要测试的区域
LOCKER.execute(diagRunId, function (unlock) {
SERVICE_ACCESSOR.makeCall params)
.done(function (data) {
console.log("Success!");
unlock();
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log("Failed!");
unlock();
});
});
并且在我的测试文件中我有我的 setup
这样的
var setup = function() {
P.mock('service-accessor', function () {
return {
makeCall: sinon.stub().returns({})
};
});
P.mock('locker', function () {
var methods = {
execute: function (lockId, wrapped) {
console.log('locked - ' + lockId)
wrapped()
},
unlock: sinon.stub()
};
return {
execute: methods.execute,
unlock: methods.unlock
};
});
P.start();
}
最后测试只是调用方法
aui.suite('Locker Test', function () {
aui.test('should lock and then unlock', testFile, {
setup: setup,
browser: function () {
P.when('utils', 'service-accessor','locker').execute(
'test', function (SERVICE_ACCESSOR, LOCKER) {
UTILS.makeCall("Identifier")
expect(LOCKER.unlock).to.have.been.called.once;
done();
}
);
},
validate: function () {},
});
});
储物柜工作并开始执行服务调用,但随后服务调用失败
Error: PhantomJS: `TypeError: 'undefined' is not a function (evaluating 'SERVICE_ACCESSOR.callService( params).done')` near
L2492> }).fail(function (jqXHR, textStatus, errorThrown) {
根据我的理解,我的模拟在被调用时应该 return 只是一个空对象,但后来我不明白 a) 为什么它会失败以及 b) 什么是未定义的?我的假设是,这是因为我没有 returning 三个对象,但我试图让它先成功!我怎样才能正确stub/mock这个?
最后我没有承诺,也没有使用存根。我使用了以下函数来代替调用 done
和 fail
。
function() {
return { done: function(callback) {
if(window.makeParamountCallSuccess) {
callback({"data": "data"});
return {
fail: function(){}
}
} else {
return {
fail: function(failCallback){ failCallback("jqXHR", "textStatus", "errorThrown")}
}
}
}
}
}```