我正在尝试为Jasmine测试框架编写测试,该测试期望出现错误.目前我正在使用GitHub的Jasmine Node.js集成.
在我的Node模块中,我有以下代码:
throw new Error("Parsing is not possible");
Run Code Online (Sandbox Code Playgroud)
现在我尝试编写一个期望这个错误的测试:
describe('my suite...', function() {
[..]
it('should not parse foo', function() {
[..]
expect(parser.parse(raw)).toThrow(new Error("Parsing is not possible"));
});
});
Run Code Online (Sandbox Code Playgroud)
我也试过了Error()一些其他的变种,只是无法弄清楚如何使它工作.
假设我有以下内容:
var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);
Run Code Online (Sandbox Code Playgroud)
上述两项测试都将通过.有没有之间的差异toBe(),并toEqual()当它涉及到评估的数字?如果是这样,我应该使用一个而不是另一个?
在jasmine.js中是否有办法检查两个数组是否相等,例如:
arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
似乎都没有用.
我正在关注angular.io这个教程
正如他们所说,我创建了hero.spec.ts文件来创建单元测试:
import { Hero } from './hero';
describe('Hero', () => {
it('has name', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.name).toEqual('Super Cat');
});
it('has id', () => {
let hero: Hero = {id: 1, name: 'Super Cat'};
expect(hero.id).toEqual(1);
});
});
Run Code Online (Sandbox Code Playgroud)
单元测试就像一个魅力.问题是:我看到一些错误,在教程中提到:
我们的编辑器和编译器可能会抱怨他们不知道是什么
it,expect因为他们缺少描述Jasmine的打字文件.我们现在可以忽略那些烦人的抱怨,因为它们是无害的.
他们确实忽视了它.即使这些错误是无害的,但当我收到大量错误时,我的输出控制台看起来并不好看.
我得到的例子:
找不到名字'describe'.
找不到名字'它'.
找不到名字'期待'.
我该怎么办才能修复它?
如何在角度2中测试私有函数?
class FooBar {
private _status: number;
constructor( private foo : Bar ) {
this.initFooBar();
}
private initFooBar(){
this.foo.bar( "data" );
this._status = this.fooo.foo();
}
public get status(){
return this._status;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现的解决方案
将测试代码本身放在闭包中或在闭包内添加代码,该代码存储对外部作用域中现有对象的局部变量的引用.
稍后使用工具删除测试代码. http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/
如果您有任何问题,请建议我更好的方法来解决这个问题?
PS
像这样的类似问题的大部分答案都不能解决问题,这就是我问这个问题的原因
大多数开发人员都说你不测试私人功能,但我不是说他们错了或是对的,但我的案例有必要对私人进行测试.
我有myService使用myOtherService,它进行远程调用,返回promise:
angular.module('app.myService', ['app.myOtherService'])
.factory('myService', [
myOtherService,
function(myOtherService) {
function makeRemoteCall() {
return myOtherService.makeRemoteCallReturningPromise();
}
return {
makeRemoteCall: makeRemoteCall
};
}
])
Run Code Online (Sandbox Code Playgroud)
为了进行单元测试myService我需要模拟myOtherService,这样它的myService方法返回一个promise.我是这样做的:
describe('Testing remote call returning promise', function() {
var myService;
var myOtherServiceMock = {};
beforeEach(module('app.myService'));
// I have to inject mock when calling module(),
// and module() should come before any inject()
beforeEach(module(function ($provide) {
$provide.value('myOtherService', myOtherServiceMock);
}));
// However, in order to properly construct my mock
// I need $q, which can …Run Code Online (Sandbox Code Playgroud) 我从一个相当大的架构变化中得到了一堆失败的规范.我想通过用'焦点'标记每一个来逐个修复它们.
jasmine.js有这样的功能吗?我发誓我曾经读过它,但我没有在文档中看到它.
我是Jasmine的新手,刚刚开始使用它.我有一个库js文件,其中包含许多与任何对象无关的函数(即全局).我该如何监视这些功能呢?
我尝试使用窗口/文档作为对象,但即使调用该函数,间谍也无法工作.我也尝试将它包装在假对象中,如下所示:
var fakeElement = {};
fakeElement.fakeMethod = myFunctionName;
spyOn(fakeElement, "fakeMethod");
Run Code Online (Sandbox Code Playgroud)
并测试
expect(fakeElement.fakeMethod).toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为间谍不起作用
我试图弄清楚如何在nodejs中测试内部(即未导出)函数(最好使用mocha或jasmine).我不知道!
假设我有一个这样的模块:
function exported(i) {
return notExported(i) + 1;
}
function notExported(i) {
return i*2;
}
exports.exported = exported;
Run Code Online (Sandbox Code Playgroud)
以下测试(摩卡):
var assert = require('assert'),
test = require('../modules/core/test');
describe('test', function(){
describe('#exported(i)', function(){
it('should return (i*2)+1 for any given i', function(){
assert.equal(3, test.exported(1));
assert.equal(5, test.exported(2));
});
});
});
Run Code Online (Sandbox Code Playgroud)
有没有办法对notExported函数进行单元测试而不实际导出它,因为它不是要暴露的?
有什么区别expect(something).toBe(true),expect(something).toBeTruthy()和expect(something).toBeTrue()?
请注意,这toBeTrue()是一个自定义匹配器,介绍在jasmine-matchers其他有用和方便的匹配器,如toHaveMethod()或toBeArrayOfStrings().
问题是通用的,但是,作为一个真实的例子,我正在测试一个元素是否显示在protractor.在这种情况下我应该使用哪个匹配器?
expect(elm.isDisplayed()).toBe(true);
expect(elm.isDisplayed()).toBeTruthy();
expect(elm.isDisplayed()).toBeTrue();
Run Code Online (Sandbox Code Playgroud) jasmine ×10
javascript ×6
unit-testing ×5
angular ×2
node.js ×2
testing ×2
typescript ×2
angularjs ×1
mocha.js ×1
mocking ×1
protractor ×1