`
zccst
  • 浏览: 3319349 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

dragonfly环境搭建——单测 SpecRunner

阅读更多
作者:zccst

单测,在前端,对于我而言,还是第一次。得好好学学单测了。


看看介绍,慢慢来。

参考:
官方文档:http://jasmine.github.io/2.0/introduction.html
https://gist.github.com/OakRaven/2623232

断断续续看了两次,基本看懂了,下面是一些基础的用法,高级用法另写一篇吧
describe("Player", function() {
  var player;
  var song;

  beforeEach(function() {
    player = new Player();
    song = new Song();
  });

  it("should be able to play a Song", function() {
    player.play(song);
    expect(player.currentlyPlayingSong).toEqual(song);

    //demonstrates use of custom matcher
    expect(player).toBePlaying(song);
  });

  describe("when song has been paused", function() {
    beforeEach(function() {
      player.play(song);
      player.pause();
    });

    it("should indicate that the song is currently paused", function() {
      expect(player.isPlaying).toBeFalsy();

      // demonstrates use of 'not' with a custom matcher
      expect(player).not.toBePlaying(song);
    });

    it("should be possible to resume", function() {
      player.resume();
      expect(player.isPlaying).toBeTruthy();
      expect(player.currentlyPlayingSong).toEqual(song);
    });
  });

  // demonstrates use of spies to intercept and test method calls
  it("tells the current song if the user has made it a favorite", function() {
    spyOn(song, 'persistFavoriteStatus');

    player.play(song);
    player.makeFavorite();

    expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true);
  });

  //demonstrates use of expected exceptions
  describe("#resume", function() {
    it("should throw an exception if song is already playing", function() {
      player.play(song);

      expect(function() {
        player.resume();
      }).toThrowError("song is already playing");
    });
  });


  /**/
  describe("The 'toEqual' matcher", function() {
	//测toBe
	it("The 'toBe' matcher compares with ===", function() {
		var a = 12;
		var b = a;
		expect(a).toBe(b);
		expect(a).not.toBe(null);
	});

	//测toEqual
    it("works for simple literals and variables", function() {
      var a = 12;
      expect(a).toEqual(12);
    });
    it("should work for objects", function() {
      var foo = {
        a: 12,
        b: 34
      };
      var bar = {
        a: 12,
        b: 34
      };
      expect(foo).toEqual(bar);
    });


	  //测toMatch
	  it("The 'toMatch' matcher is for regular expressions", function() {
		var message = "foo bar baz";
		expect(message).toMatch(/bar/);
		expect(message).toMatch("bar");
		expect(message).not.toMatch(/quux/);
	  });

	  //测toBeDefined
	  it("The 'toBeDefined' matcher compares against `undefined`", function() {
		var a = {
		  foo: "foo"
		};
		expect(a.foo).toBeDefined();
		expect(a.bar).not.toBeDefined();
	  });
	  //测`toBeUndefined`
	  it("The `toBeUndefined` matcher compares against `undefined`", function() {
		var a = {
		  foo: "foo"
		};
		expect(a.foo).not.toBeUndefined();
		expect(a.bar).toBeUndefined();
	  });
	  //测toBeNull
	  it("The 'toBeNull' matcher compares against null", function() {
		var a = null;
		var foo = "foo";
		expect(null).toBeNull();
		expect(a).toBeNull();
		expect(foo).not.toBeNull();
	  });
	  //测toBeTruthy
	  it("The 'toBeTruthy' matcher is for boolean casting testing", function() {
		var a, foo = "foo";
		expect(foo).toBeTruthy();
		expect(a).not.toBeTruthy();
	  });
	  //测toBeFalsy
	  it("The 'toBeFalsy' matcher is for boolean casting testing", function() {
		var a, foo = "foo";
		expect(a).toBeFalsy();
		expect(foo).not.toBeFalsy();
	  });
	  //测toContain(针对数组)
	  it("The 'toContain' matcher is for finding an item in an Array", function() {
		var a = ["foo", "bar", "baz"];
		expect(a).toContain("bar");
		expect(a).not.toContain("quux");
	  });
	  //测toBeLessThan
	  it("The 'toBeLessThan' matcher is for mathematical comparisons", function() {
		var pi = 3.1415926,
		  e = 2.78;
		expect(e).toBeLessThan(pi);
		expect(pi).not.toBeLessThan(e);
	  });
	  //测toBeGreaterThan
	  it("The 'toBeGreaterThan' matcher is for mathematical comparisons", function() {
		var pi = 3.1415926,
		  e = 2.78;
		expect(pi).toBeGreaterThan(e);
		expect(e).not.toBeGreaterThan(pi);
	  });
	  //测toBeCloseTo,第二个参数比较费解,看源码后知道是10的x次方,然后四舍五入
	  it("The 'toBeCloseTo' matcher is for precision math comparison", function() {
		var pi = 3.1415926,
		  e = 2.78;
		expect(pi).not.toBeCloseTo(e, 2);//乘以10的2次方,扩大100倍,然后四舍五入
		expect(pi).toBeCloseTo(e, 0);//乘以10的0次方,扩大1倍,然后四舍五入
	  });
	  //测toThrow
	  it("The 'toThrow' matcher is for testing if a function throws an exception", function() {
		var foo = function() {
		  return 1 + 2;
		};
		var bar = function() {
		  return a + 1;
		};
		expect(foo).not.toThrow();
		expect(bar).toThrow();
	  });


  });


  //The this keyword
  describe("A spec", function() {
	  var bar1;
	  //beforeEach,afterEach里可以设置this.xx变量,而且在全部it里有效
	  beforeEach(function() {
		this.foo = 0;
		bar1 = "hello";//有效
	  });

	  //但是一个it里的this.xx变量,在另一个it里无效
	  it("can use the `this` to share state", function() {
		expect(this.foo).toEqual(0);
		this.bar = "test pollution?";
		//bar1 = "hello";//无效
	  });

	  it("prevents test pollution by having an empty `this` created for the next spec", function() {
		expect(this.foo).toEqual(0);
		expect(this.bar).toBe(undefined);//true,未被另一个it污染
		expect(bar1).toBe("hello");
	  });
	});




	//嵌套
	describe("A spec", function() {
	  var foo;

	  beforeEach(function() {
		foo = 0;
		foo += 1;
	  });

	  afterEach(function() {
		foo = 0;
	  });

	  it("is just a function, so it can contain any code", function() {
		expect(foo).toEqual(1);
	  });

	  it("can have more than one expectation", function() {
		expect(foo).toEqual(1);
		expect(true).toEqual(true);
	  });

	  //先执行内部describe,再执行外部的afterEach
	  //外部的变量,可以在内部describe访问
	  describe("nested inside a second describe", function() {
		var bar;

		beforeEach(function() {
		  bar = 1;
		});

		it("can reference both scopes as needed", function() {
		  expect(foo).toEqual(bar);
		});
	  });
	});

	//对于describe,直接改成xdescribe即可
	//悬而未决,挂起  运行后,点击显示是*号。
	describe("Pending specs", function() {
	
	    xit("can be declared 'xit'",function(){
			expect(true).toBe(false);
		});
		it("can be declared with 'it' but without a function");
		it("can be declared by calling 'pending' in the spec body", function() {
			expect(true).toBe(false);
			pending();
		  });
	});






});



分享到:
评论

相关推荐

    DragonFly_四轴_teethjde_dragonfly资料包_Dragonfly_drone.zip

    《DragonFly四轴无人机技术详解》 在当今的科技领域,无人机已经成为了一个备受瞩目的热点。本资料包“DragonFly_四轴_teethjde_dragonfly资料包_Dragonfly_drone.zip”聚焦于名为“DragonFly”的四轴无人机,其中...

    DragonFly_四轴_teethjde_dragonfly资料包_Dragonfly_drone_源码.rar.rar

    本次资料包——"DragonFly_四轴_teethjde_dragonfly资料包_Dragonfly_drone_源码.rar.rar",为我们提供了宝贵的源码资源,让我们有机会深入了解这款无人机的运作机制。 首先,"DragonFly"这个名字暗示了这款无人机...

    PyPI 官网下载 | dragonfly-grasshopper-1.10.5.tar.gz

    《PyPI官网下载:Dragonfly Grasshopper 1.10.5——探索分布式与云原生Python库》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球Python用户提供了丰富的第三方库,方便了软件开发。在本文中,...

    PyPI 官网下载 | dragonfly-core-1.18.3.tar.gz

    《PyPI官网下载|Dragonfly Core 1.18.3——深入理解分布式与云原生的Python库》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python爱好者提供了丰富的第三方库下载服务。在PyPI官网上,...

    opera dragonfly插件下载

    opera dragonfly插件下载opera dragonfly插件下载opera dragonfly插件下载

    安卓APP开发项目——Dragonfly.zip

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...

    Dragonfly

    在不同的背景和颜色搭配下,字体的对比度和反差也会影响阅读效果,因此,理解Dragonfly在不同环境下的表现对于设计师来说至关重要。 此外,了解字体的版权和使用许可也是必不可少的。如果是商业用途,设计师需要...

    Python库 | dragonfly_energy-1.9.28-py2.py3-none-any.whl

    《Python库Dragonfly Energy详解——实现高效能源管理的利器》 在Python的生态系统中,库是开发者们不可或缺的工具,它们极大地丰富了Python的功能,提高了开发效率。今天我们将聚焦于一个名为“Dragonfly Energy”...

    Python-Dragonfly用于可扩展贝叶斯优化的开源python库

    Python-Dragonfly是一个开源的Python库,专门设计用于可扩展的贝叶斯优化。这个库在机器学习领域具有广泛的应用,特别是在高维度和大规模优化问题上。贝叶斯优化是一种有效的全局优化方法,它利用概率模型来平衡探索...

    VC控件(Dragonfly Automation Software)扩展版本

    【VC控件(Dragonfly Automation Software)扩展版本】是一款针对Visual C++(VC++)开发环境,基于MFC(Microsoft Foundation Classes)框架的高级控件集。这款控件库为开发者提供了丰富的功能,旨在简化自动化软件的...

    PyPI 官网下载 | dragonfly-grasshopper-1.26.2.tar.gz

    《PyPI官网下载:Dragonfly-Grasshopper 1.26.2——Python库在分布式环境中的应用》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python开发者提供了丰富的开源软件包。在PyPI官网上,我们...

    dragonfly-s3_data_store, Dragonfly ruby gem的S3数据存储.zip

    dragonfly-s3_data_store, Dragonfly ruby gem的S3数据存储 Dragonfly::S3DataStoreAmazon AWS数据存储,用于蜻蜓 gem 。gem 'dragonfly-s3_data_store'用法配置( 请记住要求)require 'dragonfly/

    Dragonfly2 Technical Reference

    文档中提到该设备已经过测试,符合FCC的Class A数字设备规则,这表明设备适用于商业环境,但若在居民区使用可能会对无线电通信造成干扰。 6. 文档中强调了设备使用和安装时须遵循手册中的说明,否则可能会产生有害...

    Dragonfly是一个用于可扩展贝叶斯优化的开源python库-python

    Dragonfly是一个用于可扩展贝叶斯优化的开源python库Dragonfly 是一个用于可扩展贝叶斯优化的开源 Python 库。 贝叶斯优化用于优化评估通常很昂贵的黑盒函数。 除了普通的优化技术,Dragonfly 还提供了一系列工具来...

    DRAGONFLY

    "DRAGONFLY"是一个与字体相关的主题,很可能是指一种特定的字体设计或者字体库。在计算机领域,字体是用于显示或打印文本的图形样式,它们对于视觉传达、设计和排版都至关重要。DRAGONFLY可能是一个艺术家、设计师...

    Dragonfly蜻蜓技术架构介绍.pptx

    Dragonfly蜻蜓技术架构介绍 作为一个专业的IT行业大师,我将对Dragonfly蜻蜓技术架构进行详细介绍。 Dragonfly蜻蜓技术架构介绍 Dragonfly是一种基于P2P(Peer-to-Peer)的镜像分发机制,旨在解决大规模分布式...

    PyPI 官网下载 | lbt-dragonfly-0.7.350.tar.gz

    本文将围绕标题提及的资源——"lbt-dragonfly-0.7.350.tar.gz",探讨其在分布式系统、云原生环境以及Python库中的应用和重要性。 "lbt-dragonfly-0.7.350.tar.gz"是一个经过压缩的Python软件包,其中包含了名为"lbt...

    Python库 | lbt-dragonfly-0.4.154.tar.gz

    《Python库——lbt-dragonfly-0.4.154详解》 在Python的世界里,库扮演着至关重要的角色,它们为开发者提供了丰富的功能,简化了代码编写,提高了开发效率。今天我们要探讨的是一个名为`lbt-dragonfly`的Python库,...

    PyPI 官网下载 | dragonfly-energy-1.12.130.tar.gz

    本文将探讨PyPI官网下载的资源——`dragonfly-energy-1.12.130.tar.gz`,这是一个针对分布式系统、云原生环境以及Python编程的重要组件。 `dragonfly-energy`这个名字暗示了这个库可能与能源管理或者绿色计算有关,...

    CEVA完成CEVA-Dragonfly NB2 NB-IoT芯片的首次测试.pdf

    3. 首次测试:首次测试表明该芯片在真实的物联网环境下能够成功运行。具体在沃达丰的物联网未来实验室中,通过沃达丰的NB-IoT网络,测试芯片连接至网络并演示了端到端IP连接。 4. 软件协议栈:此次测试还涉及到3GPP...

Global site tag (gtag.js) - Google Analytics