Jasmine测试需要外部库

时间:2013-09-18 23:59:08

标签: javascript jquery backbone.js jasmine

我想知道什么是最佳做法或至少使用Jasmine来测试需要在页面加载时调用远程库的javascript,但不在应用程序中。

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

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

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

它给出了错误。

Stripe is not defined

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

2 个答案:

答案 0 :(得分:3)

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

var Stripe = {createToken: sinon.spy()} 
form.submit();
expect(Stripe.createToken).toHaveBeenCalled();

答案 1 :(得分:2)

你可以使用Sinon.JS来模拟\ stub这个。

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

之类的事情

希望这有帮助。