我想知道什么是最佳做法或至少使用Jasmine来测试需要在页面加载时调用远程库的javascript,但不在应用程序中。
更具体地说,我正在创建一个使用条带处理付款的骨干视图。 Stripe建议您从他们的服务器加载他们的布局中的javascript。
但我的测试没有我的布局,所以当我尝试这样做时
it("calls stripe token creation", function() {
stripeSpy = spyOn(Stripe, "createToken");
form.submit();
expect(stripeSpy).toHaveBeenCalled();
});
它给出了错误。
Stripe is not defined
我宁愿不依赖远程库来进行测试,也不想真正反对依赖源代码的条件首选方法。什么是最好的方法来解决这个问题?
答案 0 :(得分:3)
要模拟Stripe
依赖关系,您必须使用要调用的函数创建一个新的Stripe
对象:
var Stripe = {createToken: sinon.spy()}
form.submit();
expect(Stripe.createToken).toHaveBeenCalled();
答案 1 :(得分:2)
你可以使用Sinon.JS来模拟\ stub这个。
jQuery的AJAX存根的示例用法
it("makes a GET request for todo items", function () {
sinon.stub(jQuery, "ajax");
getTodos(42, sinon.spy());
assert(jQuery.ajax.calledWithMatch({ url: "/todo/42/items" }));
});
对于你的我会想象你会做sinon.stub(Stripe, "createToken")
希望这有帮助。