5

我想知道什么是最佳实践,或者至少是使用 Jasmine 测试需要在页面加载时调用远程库的 JavaScript 的实践,而不是在应用程序中。

更具体地说,我正在创建一个主干视图,用于使用条带处理付款。Stripe 建议您从他们的服务器在您的布局中加载他们的 javascript。

但是我的测试没有我的布局,所以当我尝试这样做时

it("calls stripe token creation", function() {
  stripeSpy = spyOn(Stripe, "createToken");
  form.submit();
  expect(stripeSpy).toHaveBeenCalled();
});

它给出了错误。

Stripe is not defined

我宁愿不依赖远程库进行测试,也不想反对依赖其源代码的条带首选方法。解决这个问题的最佳方法是什么?

4

2 回答 2

3

要模拟依赖项,您必须使用要调用的函数Stripe创建一个新对象:Stripe

var Stripe = {createToken: sinon.spy()} 
form.submit();
expect(Stripe.createToken).toHaveBeenCalled();
于 2013-09-19T05:33:39.330 回答
2

您可以使用 Sinon.JS 来模拟\存根。

查看http://sinonjs.org/

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")

希望这可以帮助。

于 2013-09-19T03:48:16.680 回答