gpt4 book ai didi

javascript - Karma 单元测试 jsonp 回调中的延迟 promise (stripe.js)

转载 作者:行者123 更新时间:2023-12-02 16:46:07 25 4
gpt4 key购买 nike

我正在使用 Stripe 获取用户的信用卡信息,Stripe 有一个函数可以发出 JSONP 请求来生成 token ( https://stripe.com/docs/stripe.js )

我将此调用包装在服务中:

app.factory('payment', ['$window', '$q', function($window, $q) {

return {
/**
* Creates stripe token. This token will be send to our server.
* @see https://stripe.com/docs/tutorials/forms
* @param {Object} formData
* @param {Element} form
* @return {Promise}
*/
createStripeToken: function(formData, form) {
if (angular.isUndefined($window.Stripe)) { return; }

var deferred = $q.defer();

Stripe.card.createToken(formData, function(status, response) {
console.log(status) // => no output in test
var error = response.error;

if(error) {
// use form to set validations
if(error.type === 'card_error') {
var formField = error.param; // 'cvc'
form[formField].$setValidity(error.code, false);
}
deferred.reject();
} else {
// response contains id (token) and card, which contains additional card details
deferred.resolve(response);
}
});
return deferred.promise;
}
};

}]);

一切工作正常,除了测试之外,我在这里使用 Stripe 和我们的 TEST API key !

describe('Payment Service', function () {
var service;
var success, error;

beforeEach(inject(function (payment) {
service = payment;
}));

it('should get successful stripe response', function() {
var createTokenFn = spyOn(Stripe.card, 'createToken');
// Stripe.card.createToken = jasmine.createSpy("createToken");

var formData = {
number: '4111 1111 1111 1111',
cvc: '123',
exp_month: '12',
exp_year: '23'
};

service.createStripeToken(formData, null).then(function(data) {
console.log('success') // => no output
success = data;
}, function(data) {
console.log('error') // => no output
error = data;
});

$rootScope.$digest(); // $rootScope is loaded in my spec helper, this line makes no difference

expect(createTokenFn).toHaveBeenCalledWith(formData, jasmine.any(Function)); // success
expect(success).not.toEqual(undefined); // fail
});

});

这是测试此类服务的正确方法吗?我如何测试回调是否有效?

最佳答案

您可以使用 callFake 来获取回调 spy 提供的。

var createTokenFn = spyOn(Stripe.card, 'createToken').andCallFake(function(formData, callback) {
callback(200, { error: undefined });
});

然后您可以修改答案以适应您的不同用例。

fiddle :http://jsfiddle.net/bbbuu37w/1/

不知道这对你有没有用,但我发现了lib这似乎是 Strip.Js 的 Angular 包装。

关于javascript - Karma 单元测试 jsonp 回调中的延迟 promise (stripe.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27110292/

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