添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
暴躁的李子  ·  就业超市·  10 月前    · 
9976254  ·  深入理解RocketMQ ...·  3 年前    · 

toHaveBeenCalled :如果调用了spy,则 toHaveBeenCalled 将通过调用。
toHaveBeenCalledWith : 如果参数列表与spy调用时的参数相匹配,则返回true。
toHaveBeenCalledTimes :如果spy被调用了指定的次数,则 toHaveBeenCalledTimes 将通过调用。

// The example comes from Jasmine official
describe("A spy", function() {
  var foo, bar = null;
  beforeEach(function() {
    foo = {
      setBar: function(value) {
        bar = value;
    spyOn(foo, 'setBar');
    foo.setBar(123);
    foo.setBar(456, 'another param');
  });
  it("tracks that the spy was called", function() {
    expect(foo.setBar).toHaveBeenCalled();
  });
  it("tracks that the spy was called x times", function() {
    expect(foo.setBar).toHaveBeenCalledTimes(2);
  });
  it("tracks all the arguments of its calls", function() {
    expect(foo.setBar).toHaveBeenCalledWith(123);
    expect(foo.setBar).toHaveBeenCalledWith(456, 'another param');
  });
  it("stops all execution on a function", function() {
    expect(bar).toBeNull();
  });
  it("tracks if it was called at all", function() {
    foo.setBar();
    // Spy.calls.any() 检查spy是否被调用了
    expect(foo.setBar.calls.any()).toEqual(true); 
  });
});
// The example comes from an open source component library called ngx-tethys)
// 需要被测试的方法:文件大小超过最大阈值的错误提示方法
export function sizeExceedsHandler(event: ThyFileSizeExceedsContext) {
    const exceedsFilesMessage = event.exceedsFiles
        .map(item => {
            return `file: ${item.name}, size: ${item.size}`;
        .join(',');
    console.error(`some files(${exceedsFilesMessage}) size exceeds threshold ${event.sizeThreshold}`);
describe(`uploader-config`, () => {
    it('should console incorrect error message for sizeExceedsHandler', () => {
        const file1 = new File([''], 'file1.png');
        // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
        Object.defineProperty(file1, 'size', { value: 1024 * 1024 + 1 });
        const file2 = new File([], 'file2.txt');
        Object.defineProperty(file2, 'size', { value: 1024 * 1024 + 2 });
        // spyOn console.err()
        const errorSpy = spyOn(console, 'error');
        expect(errorSpy).not.toHaveBeenCalled();
        sizeExceedsHandler({
            files: [file1, file2],
            exceedsFiles: [file1, file2],
            nativeEvent: null,
            sizeThreshold: 200
        });
		// errorSpy 被调用了
        expect(errorSpy).toHaveBeenCalled();
        // errorSpy 被调用了1次
        expect(errorSpy).toHaveBeenCalledTimes(1);
        // errorSpy 被调用时的参数是 `some files(file: ${file1.name}, size: ${file1.size},file: ${file2.name}, size: ${file2.size}) size exceeds threshold 200`
        expect(errorSpy).toHaveBeenCalledWith(
            `some files(file: ${file1.name}, size: ${file1.size},file: ${file2.name}, size: ${file2.size}) size exceeds threshold 200`
    });
});

参考资料:
Jasmine官网:https://jasmine.github.io/tutorials/your_first_suite
开源组件库:https://github.com/atinc/ngx-tethys

checkoutConfigService会调用getPreferredDeliveryMode, 输入的参数值为deliveryModes: deliveryModes的数据来源为: 往上看,deliveryModes的根源是supportedDeliveryModes: 所以FunctionMatchers.toHaveBeenCalledWith的参数为mockSupportedDeliveryModes: 要获取更多Jerry的原创文章,请关注公众号"汪子熙":
前言这是翻译的Jasmine文档第二篇,第一篇文章的地址为: Jasmine文档(一)Spies(间谍)Jasmine有称为间谍(spies)的测试双重功能。一个spy可以监测任何函数的调用和参数的调用痕迹。Spy只能存在于定义它的describe()和it()代码块内,而在每一个spec结束后将被移除。(这个语法在Jasmine2.0才改变的) 有几个特别的Matchers于spy相互作用:
利用Jest的objectContaining匹配对象的键值对 利用Jest的arrayContaining匹配数组包括的值 如何在Jest的toHaveBeenCalledWith利用部分匹配功能 用 Jest 的 objectContaining 进行部分匹配 当你想测试对象的子集或者指定的键值对是,你可以使用 objectContaining 匹配器。 test('shoul
第120行给handler.handleError方法注入spy后,第121行代码flush HTTP Mock request会触发handler.handleError(的wrap实现)调用。第123行代码检测该方法是否真正被调用过。 首先执行expect(handler.handleError), 给handler.handleError创建一个spec: 实际上调用currentRunnable的expect方法: this指向spec,actual就是被wrap后的方法。使用expectat
Vue-test-utils是Vue的官方的单元测试框架,它提供了一系列非常方便的工具,使我们更加轻松的为Vue构建的应用来编写单元测试。主流的 JavaScript 测试运行器有很多,但 Vue Test Utils 都能够支持。它是测试运行器无关的。 Jest,是由Facebook开发的单元测试框架,也是Vue推荐的测试运行器之一。Vue对它的评价是: Jest 是功能最全的...
1. 什么是单元测试 在计算机编程,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)的方法。 每个理想的测试案例独立于其它案例;为测试时隔离模块,经常使用stubs、mo...
测试的对象可以是我们程序的任何一个组成部分。大到一个分为多步骤的下单流程,小到代码的一个函数。 单元测试特指被测试对象为程序最小组成单元的测试。这里的最小组成单元可以是一个函数、一个类等等。 单元测试的优势 由于被测试对象的简单(通常只有一个或多个输入以及一个输出),这就决定了单元测试开发起来也很简单,通常每个测试只有几行到十几行不等。测试代码的简单表示它可以被更频繁的执行(事实上,很多单元测试框架都有 watch 模式。每次改 Jest是一个Javascript测试框架,由Facebook开源,致力于简化测试,降低前端测试成本,已被create-react-app、@vue/cli等脚手架工具默认集成。Jest主打开箱即用、快照功能、独立并行测试以及良好的文档和Api. //#初始化一个项目 mkdir jest-test&&cd jest-test yarn init -y //#...
转载地址React 16 Jest ES6 Class Mocks(使用ES6语法类的模拟) 实例二项目初始化git clone https://github.com/durban89/webpack4-react16-reactrouter-demo.git  cd webpack4-react16-reactrouter-demo git fetch origin git checkout v...
JavaScript 单元测试是指在编写代码时使用特定工具对代码的独立功能进行测试的过程。目的是确保代码的每一个部分都能够正常工作,并且在修改代码后能够继续正常工作。 为了进行 JavaScript 单元测试,你需要使用特定的测试框架,比如 Jasmine、Mocha 或 Jest。这些测试框架提供了用于编写和运行测试用例的 API。测试用例是指定义测试输入和预期输出的代码块。 在编写测试用例时,你需要确定要测试的功能,并编写相应的代码来模拟输入,执行测试的代码,并检查输出是否符合预期。然后,你可以使用测试框架的 API 来运行测试用例并获取结果。如果测试通过,则意味着代码正常工作;如果测试失败,则意味着代码存在问题,需要进一步调试。 执行单元测试可以帮助你更快地发现和修复代码的错误,并且可以提高代码的质量和可维护性。