根据Jasmine文档,可以像这样创建一个模拟:
jasmine.createSpyObj(someObject, ['method1', 'method2', ... ]);
Run Code Online (Sandbox Code Playgroud)
你如何存根这些方法之一?例如,如果要测试方法抛出异常时会发生什么,那么您将如何做?
我运行测试时收到上述错误消息.下面是我的代码(我使用Backbone JS和Jasmine进行测试).有谁知道为什么会这样?
$(function() {
describe("Category", function() {
beforeEach(function() {
category = new Category;
sinon.spy(jQuery, "ajax");
}
it("should fetch notes", function() {
category.set({code: 123});
category.fetchNotes();
expect(category.trigger).toHaveBeenCalled();
}
})
}
Run Code Online (Sandbox Code Playgroud) 比方说,我有一个服务shop依赖于两个状态的服务schedule和warehouse.如何注入不同的版本schedule,并warehose为shop单元测试?
这是我的服务:
angular.module('myModule').service('shop', function(schedule, warehouse) {
return {
canSellSweets : function(numRequiredSweets){
return schedule.isShopOpen()
&& (warehouse.numAvailableSweets() > numRequiredSweets);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的嘲笑:
var mockSchedule = {
isShopOpen : function() {return true}
}
var mockWarehouse = {
numAvailableSweets: function(){return 10};
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
expect(shop.canSellSweets(5)).toBe(true);
expect(shop.canSellSweets(20)).toBe(false);
Run Code Online (Sandbox Code Playgroud) 我对一个使用window.location.href的函数进行了一些单元测试 - 不太理想我宁愿通过它,但它在实现中是不可能的.我只是想知道是否有可能模拟这个值而不实际导致我的测试运行器页面实际上转到URL.
window.location.href = "http://www.website.com?varName=foo";
expect(actions.paramToVar(test_Data)).toEqual("bar");
Run Code Online (Sandbox Code Playgroud)
我正在使用jasmine作为我的单元测试框架.
我想测试在我的Javascript对象构造函数中是否调用以下方法.从我在Jasmine文档中看到的,我可以窥探一个构造函数方法,并且我可以在实例化对象之后监视方法,但是在构造对象之前我似乎无法监视方法.
物体:
Klass = function() {
this.called_method();
};
Klass.prototype.called_method = function() {
//method to be called in the constructor.
}
Run Code Online (Sandbox Code Playgroud)
我想在规范中做这样的事情:
it('should spy on a method call within the constructor', function() {
spyOn(window, 'Klass');
var obj = new Klass();
expect(window.Klass.called_method).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud) 我正在使用Jasmine来测试是否创建了某些对象并调用了它们的方法.
我有一个jQuery小部件,它创建flipcounter对象并调用它们的setValue方法.flipcounter的代码在这里:https://bitbucket.org/cnanney/apple-style-flip-counter/src/13fd00129a41/js/flipcounter.js
flipcounters使用以下方式创建:
var myFlipCounter = new flipCounter("counter", {inc: 23, pace: 500});
Run Code Online (Sandbox Code Playgroud)
我想测试创建flipcounters并调用setValue方法.我的问题是如何在创建这些对象之前监视这些对象?我是否会监视构造函数并返回虚假对象?示例代码确实会有所帮助.谢谢你的帮助!:)
更新:
我已经尝试过像这样监视flipCounter了:
myStub = jasmine.createSpy('myStub');
spyOn(window, 'flipCounter').andReturn(myStub);
//expectation
expect(window.flipCounter).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
然后通过flipCounter测试setValue调用:
spyOn(myStub, 'setValue');
//expectation
expect(myStub.setValue).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
初始化flipCounter的第一个测试很好,但是为了测试setValue调用,我得到的是'setValue()方法不存在'错误.我这样做是对的吗?谢谢!
我正在使用Jasmine对一些JavaScript进行单元测试,并希望监视(模拟)由jQuery选择器访问的DOM元素.
我的规格是:
it("should be able to mock DOM call", function() {
spyOn($("#Something"), 'val').andReturn("bar");
result = $("#Something").val();
expect(result).toEqual("bar");
});
Run Code Online (Sandbox Code Playgroud)
在我的specrunner.html中,我有:
<input type="hidden" id="Something" value="foo" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,规范失败了:
应该能够模拟DOM调用预期'foo'等于'bar'.
我通过jasmine-maven-plugin使用Jasmine,我想在Maven构建输出中看到console.log()消息.有没有办法实现这个目标?
如果无法重定向console.log(),是否还有其他方法可以从我的测试中进行记录,以便它们显示在Maven构建输出上?
我正在以无头的方式在Jenkins上运行这些测试,并希望能够从测试中获得一些调试输出.
我已经回顾了Jasmine的toHaveBeenCalledWith匹配器的文档,以便了解是否可以为参数传递正则表达式,如果该参数应该是一个字符串.不幸的是,这是不受支持的功能.还有一个问题在github上打开请求此功能.
我已经挖了一些代码库,我看到如何在现有的匹配器中实现它.我认为将它作为一个单独的匹配器实现更合适,这样就可以单独捕获抽象.
与此同时,什么可能是一个好的解决方法?
我通常的测试用例看起来像
it("should send get request", inject(function(someServices) {
//some test
}));
Run Code Online (Sandbox Code Playgroud)
并且Jasmine 2.0异步测试看起来应该是这样的
it("should send get request", function(done) {
someAsync.then(function(){
done();
});
});
Run Code Online (Sandbox Code Playgroud)
如何在一次测试中同时使用done和inject?
jasmine ×10
javascript ×6
unit-testing ×3
angularjs ×2
mocking ×2
spy ×2
testing ×2
backbone.js ×1
jquery ×1
sinon ×1