首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Jasmine中调用伪构造函数

在Jasmine中调用伪构造函数可以通过使用spyOn函数来模拟构造函数的调用。下面是一个完善且全面的答案:

在Jasmine中,可以使用spyOn函数来模拟构造函数的调用。spyOn函数可以用于创建一个伪造的构造函数,并且可以跟踪该构造函数的调用情况。

首先,需要使用spyOn函数来创建一个伪造的构造函数。可以使用jasmine.createSpyObj函数来创建一个具有指定方法的伪造对象。例如,可以创建一个伪造的构造函数,其中包含一个名为"initialize"的方法:

代码语言:txt
复制
var FakeConstructor = jasmine.createSpyObj('FakeConstructor', ['initialize']);

接下来,可以使用spyOn函数来模拟构造函数的调用。可以使用and.callThrough()方法来指定当调用构造函数时,实际执行原始的构造函数代码。例如,可以模拟构造函数的调用,并将其返回值存储在一个变量中:

代码语言:txt
复制
var fakeInstance = new FakeConstructor();
spyOn(window, 'FakeConstructor').and.callThrough();

现在,可以通过调用伪造的构造函数来模拟构造函数的调用。可以使用expect函数来断言构造函数是否被调用,并且可以使用toHaveBeenCalledWith方法来检查构造函数是否被传递了正确的参数。例如,可以断言构造函数被调用,并且传递了一个名为"foo"的参数:

代码语言:txt
复制
expect(FakeConstructor).toHaveBeenCalledWith('foo');

此外,还可以使用and.returnValue方法来指定构造函数的返回值。例如,可以指定构造函数返回一个伪造的实例:

代码语言:txt
复制
spyOn(window, 'FakeConstructor').and.returnValue(fakeInstance);

最后,可以使用伪造的实例来调用构造函数中的方法。例如,可以调用"initialize"方法:

代码语言:txt
复制
fakeInstance.initialize();

总结起来,在Jasmine中调用伪构造函数的步骤如下:

  1. 使用jasmine.createSpyObj函数创建一个伪造的构造函数,指定构造函数中的方法。
  2. 使用spyOn函数来模拟构造函数的调用,并使用and.callThrough()方法指定实际执行原始的构造函数代码。
  3. 使用expect函数来断言构造函数是否被调用,并使用toHaveBeenCalledWith方法检查传递的参数。
  4. 可选地,使用and.returnValue方法指定构造函数的返回值。
  5. 使用伪造的实例来调用构造函数中的方法。

希望这个答案能够满足你的需求。如果你需要更多关于Jasmine或其他云计算相关的问题的帮助,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java构造函数调用另一个构造函数_java构造函数

参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回值类型...,连void都不写  * 3.构造方法不能return一个具体的返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载的。  ...;     }     //有参数的构造方法     public Student(String name,int age) {         System.out.println("全参构造方法执行啦

4.5K60
  • 【C++】构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 不能调用 构造函数 )

    传入的 参数 ; 类初始化时 , 根据定义顺序 , 先调用 成员变量的 构造函数 , 然后调用外部类构造函数 , 析构函数正好相反 ; 实例对象 的 const 成员变量 必须只能在 初始化列表 中进行...初始化 , 所有的构造函数都要进行初始化操作 ; 构造函数 不能调用 构造函数 ; 一、匿名对象 生命周期 1、匿名对象 生命周期 说明 调用 类名(构造函数参数) 创建的是 匿名对象 ; 匿名对象...二、构造函数 调用 构造函数 ---- 1、构造函数 不能调用 构造函数 构造函数 调用 构造函数 是危险行为 ; 构造函数 调用 构造函数 , 并不会为本对象进行初始化操作 ; 构造函数调用方式...执行 Student 的构造函数" << endl; } 然后 , 在无参的 构造函数 , 调用 有参构造函数 ; // 构造函数 调用 构造函数 是危险行为 Student() { /...endl; } // 构造函数 调用 构造函数 是危险行为 Student() { // 构造函数调用构造函数 // 此时 创建 的是匿名对象 // 如果 匿名对象 没有被接收

    20120

    C++不要在构造函数和析构函数调用函数

    虽然可以对虚函数进行实调用,但程序员编写虚函数的本意应该是实现动态联编。在构造函数调用函数函数的入口地址是在编译时静态确定的,并未实现虚调用。...但是为什么在构造函数调用函数,实际上没有发生动态联编呢? 1. 不要在构造函数调用函数的原因 第一个原因,在概念上,构造函数的工作是为对象进行初始化。...当创建某个派生类的对象时,如果在它的基类的构造函数调用函数,那么此时派生类的构造函数并未执行,所调用函数可能操作还没有被初始化的成员,浙江导致灾难的发生。...2.不要在析构函数调用函数的原因 同样的,在析构函数调用函数函数的入口地址也是在编译时静态决定的。也就是说,实现的是实调用而非虚调用。 考察如下例子。...因此,一般情况下,应该避免在构造函数和析构函数调用函数,如果一定要这样做,程序猿必须清楚,这是对虚函数调用其实是实调用

    3.3K30

    C++核心准则C.82:不要在构造函数或析构函数调用函数

    C.82: Don't call virtual functions in constructors and destructors C.82:不要在构造函数或析构函数调用函数 Reason...到目前为止,被调用函数应该只属于构造对象本身,而不是可能存在于派生类的某个覆盖函数。那样做非常难理解。...最坏的情况,在构造函数或者析构函数中直接或间接调用一个没有实现的纯虚函数会导致没有定义的行为。...从构造函数和析构函数调用函数并不是本身有什么错误。这种调用的语义是安全的。然而,经验表明这样的调用很少是必须的,很容易扰乱维护者,如果被新手使用会成为错误源。...提示来自构造函数或析构函数的虚函数调用

    77150

    【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | DexFile 构造函数及相关调用函数 | Android 源码查找 native 函数 )

    文章目录 一、DexFile 构造函数 二、DexFile.openInMemoryDexFile 函数 三、Android 源码查找 native 函数 一、DexFile 构造函数 ---- 上一篇博客...【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 ) 分析到..., 在 DexPathList 的 makeInMemoryDexElements 方法 , 调用了 DexFile(ByteBuffer buf) 构造函数 , 创建 DexFile ; 在 DexFile...构造函数 , 调用了 openInMemoryDexFile 函数 ; DexFile 构造函数源码 : /** * 加载DEX文件。...---- 在 DexFile.openInMemoryDexFile 函数 , 调用了 2 个 native 方法 , /** * 加载DEX文件。

    1.1K20

    【C++】多态 ⑨ ( vptr 指针初始化问题 | 构造函数 调用函数 - 没有多态效果 )

    构造函数 的 作用就是 创建对象 , 构造函数 最后 一行代码 执行完成 , 才意味着 对象构建完成 , 对象构建完成后 , 才会将 vptr 指针 指向 虚函数表 ; 如果在 构造函数 调用函数... 调用函数 , 则 没有 多态效果 ; 在 父类 的 构造函数 , 调用了 父类的 虚函数 ; 此时 , 如果 创建 子类对象 , 执行 父类构造函数 , 仍然调用 父类 的虚函数 , 子类的虚函数...没有被调用 , 说明 构造函数 执行期间 , 多态没有生效 ; 参考 【C++】继承 ⑧ ( 继承 + 组合 模式的类对象 构造函数 和 析构函数 调用规则 ) 博客构造函数 调用规则 : 构造函数...父类构造函数 调用 fun 虚函数 , 只能调用 父类本身的 fun 函数 , 此时 vptr 指针没有指向 虚函数表 , 虚函数表未生效 , 只能调用 父类的 fun 函数本身 ; 父类的 构造函数...调用完毕后 , vptr 指针 才指向 父类的 虚函数表 ; 然后 , 调用 子类 的构造函数 , 此时在 子类构造函数 调用 fun 虚函数 , 只能调用 子类本身的 fun 函数 , 此时 vptr

    26520

    何在 Go 函数获取调用者的函数名、文件名、行号...

    背景 我们在应用程序的代码添加业务日志的时候,不论是什么级别的日志,除了我们主动传给 Logger 让它记录的信息外,这行日志是由哪个函数打印的、所在的位置也是非常重要的信息,不然排查问题的时候很有可能就犹如大海捞针...对于在记录日志时记录调用 Logger 方法的调用者的函数名、行号这些信息。...、该调用在文件的行号。...获取调用者的函数名 runtime.Caller 返回值第一个返回值是一个调用栈标识,通过它我们能拿到调用栈的函数信息 *runtime.Func,再进一步获取到调用者的函数名字,这里面会用到的函数和方法如下...真正要实现日志门面之类的类库的时候,可能是会有几层封装,想在日志里记录的调用者信息应该是业务代码打日志的位置,这时要向上回溯的层数肯定就不是 1 这么简单了,具体跳过几层要看实现的日志门面具体的封装情况

    6.5K20

    创建子类对象时,父类构造函数调用被子类重写的方法为什么调用的是子类的方法?

    void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候父类会调用子类方法...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存。...当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言是静态多分派,动态单分派。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

    6.2K10

    【Groovy】Groovy 方法调用 ( Groovy 构造函数为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )

    文章目录 一、Groovy 构造函数为成员赋值 二、Groovy 函数的参数传递与键值对参数 三、完整代码示例 一、Groovy 构造函数为成员赋值 ---- Groovy 类没有定义构造函数 ,...但是可以使用如下形式的构造函数 , 为 Groovy 类设置初始值 ; new 类名(成员名1: 成员值1, 成员名2: 成员值2) 顺序随意 : 成员的顺序随意 , 没有强制要求 , 只需要 成员名..., ${student3.age}" 执行结果为 : student : Tom , 18 student2 : Jerry , 16 student3 : Jim , null 二、Groovy 函数的参数传递与键值对参数...---- 在 Groovy 的构造函数 , 可以使用 成员名1: 成员值1, 成员名2: 成员值2 类型的参数 , 这是键值对 map 类型的集合 ; 但是对于普通的函数 , 不能使用上述格式 ,...如果使用 student.printValue(a: “Tom”, b: 18) , 就会报错 , 提示只传入了一个 map 集合作为参数 ; 必须使用如下形式 , 才能正确执行 printValue 函数

    9.1K20

    深入理解javascript的继承机制(2)临时构造函数模式Uber – 从子对象调用父对象的接口将继承部分封装成函数

    为了解决前文提到的将共有的属性放进原型这种模式产生的子对象覆盖掉父对象同名属性的问题,就出现了另一种模式,我们称作为临时构造函数模式 临时构造函数模式 我们具体通过代码来分析 function Shape...F,然后将Shape构造函数的原型对象赋给F的原型。...但在javascript没有这样的语法,需要我们实现。...uber属性,同时使他指向父对象的原型,然后更改了Shape的toString函数,更新后的函数,会先检查this.constructor是否有uber属性,当对象调用toString时,this.constructor...就是构造函数,找到了uber属性之后,就调用uber指向的对象的toString方法,所以,实际就是,先看父对象的原型对象是否有同String,有就先调用它。

    1.6K20

    vue源码解析入口文件

    container.innerHTML; } } Vue.compile = compileToFunctions; export default Vue; 复制代码 从代码上得知,入口文件主要是完成了mount函数调用...,在调用过程先判断用户有无传入的render函数,如果没有则将template转化成render函数,并且挂载到options上。...Vue构造函数 在new Vue()的过程到底发生了什么,让我们来看下vue的构造函数,代码位置在src/core/instance/index.js。...$options.el) } } } 复制代码 可以看到代码调用了一些函数, initLifecycle(vm) initEvents(vm) initRender(vm) callHook...created生命周期之前调用了初始化事件、初始化render函数调用beforeCreate生命周期钩子、舒适化inject、初始化数据、初始化provide等操作,下节我们将详细介绍各个函数的作用

    83800

    深入理解JavaScript(二)

    C.非构造函数 encodeURI(uri):用百分号来编码特殊字符,除了;,/?...eval所执行的代码会在当前作用域下创建本地变量,而严格模式下不会 2.执行eval()的方式有两种 直接调用:直接调用eval函数 间接调用:通过将eval()存储在另一个名称下并通过call()方法来调用...;ECMAScript5允许使用保留字作为属性键; C.具有争议的规则 1.面向对象 推荐构造函数而不是其他实例创建模式 避免私有数据使用闭包 即使构造函数没有参数,也要写括号 小心操作符优先级...A.术语 1.使用“子类化内置构造函数(subclass a built-in)”,而避免采用“扩展(extend)” B.障碍1:具有内部属性的实例 1.在JS中常用的子类化技术是在子类构造函数调用超类构造函数...,且作用域中this指向子类自身 2.解决方法:直接复制方法和属性到实例 C.障碍2:内置的构造函数不能作为方法调用 1.解决方法:在子类构造函数,新建一个超类实例,并且将超类实例的属性复制到子类实例

    77920

    译|通过构建自己的JavaScript测试框架来了解JS测试

    在当今的软件开发,单元/功能测试已成为软件开发的组成部分。随着 Nodejs 的出现,我们已经看到了许多超级 JS 测试框架的发布:Jasmine,Jest 等。 ?...这些活动称为“设置和拆卸”(用于清理),Jasmine 有一些功能可用来简化此工作: beforeAll 这个函数在 describe 测试套件的所有规范运行之前被调用一次。...afterAll 在测试套件的所有规范完成后,该函数将被调用一次。 beforeEach 这个函数在每个测试规范之前被调用,it 函数已经运行。...看,我们的测试框架像 Jest 和 Jasmine 一样工作。它仅在 Node 上运行,在下一篇文章,我们将使其在浏览器上运行。...我们看到了如何在项目中使用 describe、it、expect 和各种匹配函数来运行测试。下一次,你使用 Jest 或 Jasmine,你会更有信心,因为现在你知道它们是如何工作的。

    1.5K10

    分享7个专业级的JavaScript测试库,提高你的工作效率

    ; }); }); 在上述代码,describe函数定义了一组相关的测试,it函数定义了一个单独的测试。...; } module.exports = myFunction; 当你想运行测试时,可以在终端运行以下命令: npx jasmine myFunction.spec.js 如果myFunction函数的行为符合我们的预期...2、Sinon 这是一个独立的库,用于在JavaScript测试创建测试替身(侦查、桩和模拟)。它通过提供工具来验证函数调用、控制行为等,帮助你编写隔离的测试。...步骤定义是用JavaScript编写的函数,这些函数会被Cucumber用来执行功能文件的每一步。...(); // 使模拟函数调用时返回特定的值 td.when(mockFunction('hello')).thenReturn('world'); // 现在,当你调用 mockFunction(

    28020

    为ES6配置JavaScript测试工具

    即使是你使用了一个调用了Babel的库,这也是适用的。把配置选项写入.babelrc文件意味着你不必在多处维护这些信息了。...文件: "scripts": { "test": "babel-node node_modules/.bin/jasmine" } 在浏览器环境Jasmine的配置步骤和Mocha一样...既然我们已经配置好了测试工具,任何在你应用中使用的特性也都可以在测试代码中使用。...在Mocha谨慎使用箭头函数 在Mocha请谨慎使用箭头函数。在某些情况下你需要使用this.timeout来控制一个测试在超时之前的等待时间。如果你使用了箭头函数,那这个配置就不会生效。...当你的测试存在测试替身(test double)时使用它是个好主意,因为它会在测试结束时自动帮你释放被替身的对象。但是由于它使用了this绑定,因此它无法在使用箭头函数时正常工作。

    2.9K20
    领券