标签: jasmine

如何编写一个期望在Jasmine中抛出Error的测试?

我正在尝试为Jasmine测试框架编写测试,该测试期望出现错误.目前我正在使用GitHubJasmine 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()一些其他的变种,只是无法弄清楚如何使它工作.

javascript testing node.js jasmine

457
推荐指数
9
解决办法
18万
查看次数

Jasmine JavaScript测试 - toBe vs toEqual

假设我有以下内容:

var myNumber = 5;
expect(myNumber).toBe(5);
expect(myNumber).toEqual(5);
Run Code Online (Sandbox Code Playgroud)

上述两项测试都将通过.有没有之间的差异toBe(),并toEqual()当它涉及到评估的数字?如果是这样,我应该使用一个而不是另一个?

javascript jasmine

319
推荐指数
4
解决办法
12万
查看次数

Jasmine.js比较数组

在jasmine.js中是否有办法检查两个数组是否相等,例如:

arr = [1, 2, 3]
expect(arr).toBe([1, 2, 3])
expect(arr).toEqual([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

似乎都没有用.

javascript jasmine

199
推荐指数
1
解决办法
9万
查看次数

Angular 2单元测试:找不到名称'describe'

我正在关注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'.

找不到名字'它'.

找不到名字'期待'.

我该怎么办才能修复它?

unit-testing jasmine typescript angular

194
推荐指数
6
解决办法
11万
查看次数

如何使用Jasmine为私有方法编写Angular 2/TypeScript的单元测试

如何在角度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)

我发现的解决方案

  1. 将测试代码本身放在闭包中或在闭包内添加代码,该代码存储对外部作用域中现有对象的局部变量的引用.

    稍后使用工具删除测试代码. http://philipwalton.com/articles/how-to-unit-test-private-functions-in-javascript/

如果您有任何问题,请建议我更好的方法来解决这个问题?

PS

  1. 像这样的类似问题的大部分答案都不能解决问题,这就是我问这个问题的原因

  2. 大多数开发人员都说你不测试私人功能,但我不是说他们错了或是对的,但我的案例有必要对私人进行测试.

unit-testing jasmine typescript angular

159
推荐指数
8
解决办法
7万
查看次数

如何在Angularjs Jasmine单元测试中模拟返回承诺的服务?

我有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)

javascript unit-testing mocking jasmine angularjs

149
推荐指数
4
解决办法
13万
查看次数

我如何关注jasmine.js中的一个规范?

我从一个相当大的架构变化中得到了一堆失败的规范.我想通过用'焦点'标记每一个来逐个修复它们.

jasmine.js有这样的功能吗?我发誓我曾经读过它,但我没有在文档中看到它.

jasmine

146
推荐指数
6
解决办法
8万
查看次数

使用Jasmine监视没有对象的函数

我是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)

这不起作用,因为间谍不起作用

javascript unit-testing jasmine

143
推荐指数
4
解决办法
9万
查看次数

如何访问和测试node.js模块中的内部(非导出)功能?

我试图弄清楚如何在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函数进行单元测试而不实际导出它,因为它不是要暴露的?

unit-testing mocha.js node.js jasmine

142
推荐指数
4
解决办法
5万
查看次数

toBe(true)vs toBeTruthy()vs toBeTrue()

有什么区别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)

javascript testing jasmine protractor jasmine-matchers

133
推荐指数
4
解决办法
7万
查看次数