gpt4 book ai didi

javascript - 如何使用内部调用返回 promise 的函数的 jasmine-node 测试函数?

转载 作者:行者123 更新时间:2023-11-30 17:06:52 25 4
gpt4 key购买 nike

我只是在试用 jasmine-node。我需要一些帮助来解决 promise 问题。我有一个简单的js文件

//dataService.js

var Q = require('q');
console.info("Q is "+Q);
exports.test = function() {
console.warn("Will call promise now");
this.getQuestions().then(function() {
console.log("Test..");
});
};

exports.getQuestions = function() {

var deferred = Q.defer();
for(i=0; i<=10; i++) {
if(i===10) {
deferred.resolve(i);
}
}
return deferred.promise;
// return {
// 'Question1': 'What is your name'
// }
}

//end of dataService.js



And the test is

// testspec.js


var assert = require("assert");
var q = require('q');
var testFile = require('../routes/dataService');
var fs = require('fs');


describe('#indexOf()', function(done){
it('should return -1 when the value is not present', function(done){
console.log("Teststststst" + fs);
assert.equal(-1, [1,2,3].indexOf(5));
assert.equal(-1, [1,2,3].indexOf(0));
spyOn(testFile, 'getQuestions').andCallFake(function() {
console.warn("Spy Called********************");
var deferred = q.defer();
deferred.resolve(1);
console.info("passing 1****");
//done(1);
return deferred.promise;
});
spyOn(console, 'log');
testFile.test();
console.info("Testststststsinggggggggg");
expect(console.log).toHaveBeenCalledWith("Test..");
console.info("Done*****************");
})
});

//测试文件结束

现在你可以看到我正在调用 testFile.test() 函数,它只是 dataService.js 中的测试函数。此函数调用 dataService.js(同一文件)中的 getQuestions(),它返回一个 promise 。我在我的测试中模拟了 getQuestions() 函数,它被调用并解决了 promise ,但是我的 test() 成功方法没有被调用,所以我的测试失败了。

最佳答案

您的 getQuestions 方法永远不会解决 promise 。

你有一个从 0 运行到 9 的循环,但你只有在 i === 10 时才解决它。

改变:

for(i=0; i<10; i++) {
if(i===10) {
deferred.resolve(i);
}
}

收件人:

deferred.resolve(10);

作为调用返回 promise 的函数的一般提示方法,应该自己返回 promise ,这样您就可以轻松地测试它们并 Hook 它们的完成。出于这个原因,我会让 .test 返回一个 promise (而不是仅仅调用它)

关于javascript - 如何使用内部调用返回 promise 的函数的 jasmine-node 测试函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com