使用Jasmine-Karma对javascript进行单元测试:如何模拟函数内部使用的变量
需要测试的功能:使用Jasmine-Karma对javascript进行单元测试:如何模拟函数内部使用的变量,javascript,jquery,unit-testing,karma-runner,karma-jasmine,Javascript,Jquery,Unit Testing,Karma Runner,Karma Jasmine,需要测试的功能: function validate() { var isOk = false; var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ; If(radios === "ok" ) isOk = true; return isOk; } describe("validate ok check", function() { it("valida
function validate() {
var isOk = false;
var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ;
If(radios === "ok" )
isOk = true;
return isOk;
}
describe("validate ok check", function() {
it("validate returns true", function () {
expect(validate()).tobe(true);
}) ;
}) ;
我想为上述代码编写测试用例。我用茉莉花的业力来实现这一点。我有一个疑问
如何模拟从jquery选择器获取值的radios变量并为其分配模拟值,以便测试用例可以继续测试剩余函数的其余部分
测试用例:
function validate() {
var isOk = false;
var radios = $('input[name="abc"]:checked', '#parentDiv'). val() ;
If(radios === "ok" )
isOk = true;
return isOk;
}
describe("validate ok check", function() {
it("validate returns true", function () {
expect(validate()).tobe(true);
}) ;
}) ;
当前在运行测试用例时,radios变量被分配了未定义的值,但是我想模拟它,以获得分配给它的“ok”值,从而成功地通过测试用例 在Karma上下文中,您应该测试JS-only功能。您的代码包含依赖于现有DOM(浏览器)的JQuery,因此它不太适合此类测试 在这种情况下,您可以模拟JQuery本身。由于您将其用作全局变量,因此只需在测试用例中覆盖它即可:
$ = function(selector) {
if (selector) === 'input[name="abc"]:checked', '#parentDiv' {
return {
val: function() { return 'ok'; }
};
}
};
describe("validate ok check", function() {
it("validate returns true", function () {
expect(validate()).tobe(true);
}) ;
}) ;
注意:这是一种非常直接的方法-您可以使用jasmine的mock来提高可靠性(例如,还可以注册您希望从jquery调用的内容以及调用次数等)。
'input[name=“abc”]:checked',
我想你不需要在这里留空格。你有什么问题吗?@jai你为什么要删除你的评论?你对我上面的问题给出了一个非上下文的答案,然后删除了你的答案和我的评论,即使是我为了更好地理解而详细阐述了这个问题。请让其他人回答,或者请让我知道你需要什么细节,哪些部分不清楚?看看我看到了什么,我问了什么。因为我贴出的答案没有回答你的问题,所以我删除了它,这很好。现在回到你的岗位。但是问题还是不清楚,而且很不清楚你对SO有什么要求?洁:你能告诉我哪一部分不清楚吗。?我的问题是如何在测试用例中模拟变量。我告诉了周围的很多人,他们理解这个问题。请让我知道哪个部分不清楚?我会尽量详细说明。谢谢