gpt4 book ai didi

javascript - 在 Angular karma 测试中模拟 Stripe

转载 作者:行者123 更新时间:2023-11-30 00:09:29 24 4
gpt4 key购买 nike

我在为 Karma 测试模拟 Stripe 对象时遇到问题。它必须是第一个加载的脚本(在 angular-stripe 之前)。

我正在我的 karma 配置中的脚本中加载它:

var stripe = new function() {        
this.setPublishableKey = function(key) {}
}

Object.defineProperty(window, 'Stripe', { value: stripe, configurable: true, enumerable: true, writable: true });

这给出了Attempting to configurable attribute of unconfigurable property

我已经尝试过原型(prototype)方法,但它无法识别我以这种方式添加的任何方法。

window.Stripe = function();
window.Stripe.prototype.setPublishableKey = function() {}

这给出:undefined is not a constructor (evaluating 'stripeProvider.setPublishableKey(config.stripeId)') 我相信我已经追踪到不存在的方法(当我将 window.Stripe 转储到 Angular Stripe 它不显示方法)

最后作为一个对象:

window.Stripe = { 
...

yield :Stripe 必须作为 window.Stripe 可用。看起来 angular-stripe 特别想要一个功能。

如果我复制 stripe,无论 Stripe 做什么都有效本地文件 - 我收到关于不在 stripe.com 上的其他错误,所以我想模拟它。

解决方案 感谢@estus,我能够以 Angular 方式解决这个问题:

angular.module('angular-stripe', []).provider('stripe', {
setPublishableKey: function() { },
$get: function() {}
})
beforeEach(module('app'));

以上足以覆盖实际加载的 angular-stripe 而不会抛出 Stripe missing 错误。

最佳答案

Angular Stripe 是 ultrathin wrapper around Stripe global . Angular DI 的主要优势之一是可测试性。

模拟 angular-stripe 单元而不是 Stripe 本身,它们正是为此而存在的。

module('app', ($provide) => {
$provide.provider('stripe', function () {
this.setPublishableKey = jasmine.createSpy();
this.$get = jasmine.createSpy();
});
});

关于javascript - 在 Angular karma 测试中模拟 Stripe ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093266/

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