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

如何正确模拟角度服务?Karma Jasmine测试:预计间谍service.getShipPhotos会被调用一次。它被调用了0次

如何正确模拟角度服务?

在进行Karma Jasmine测试时,我们可以使用Spies(间谍)来模拟和监视函数的调用情况。对于预计间谍service.getShipPhotos会被调用一次,但实际上被调用了0次的情况,我们可以按照以下步骤进行正确的模拟:

  1. 导入所需的测试工具和依赖项,包括Karma、Jasmine和被测试的服务。
  2. 在测试用例中创建一个间谍对象,用于监视service.getShipPhotos函数的调用情况。
代码语言:txt
复制
// 导入所需的依赖项
import { TestBed, inject } from '@angular/core/testing';
import { YourService } from './your-service';

describe('YourService', () => {
  let service: YourService;
  let spy: jasmine.Spy;

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [YourService]
    });

    service = TestBed.inject(YourService);
    spy = spyOn(service, 'getShipPhotos');
  });

  it('should correctly simulate the service call', () => {
    // 执行测试代码,调用相关函数
    // ...

    // 断言间谍函数被调用一次
    expect(spy).toHaveBeenCalledTimes(1);
  });
});

在上述代码中,我们首先导入了TestBedinject,它们是Angular测试框架中的工具。然后,我们创建了一个YourService的实例,并使用spyOn函数创建了一个间谍对象spy,用于监视getShipPhotos函数的调用情况。

在测试用例中,我们可以执行相关的测试代码,调用被测试的函数。最后,使用expect断言来验证间谍函数spy被调用了一次。

这样,我们就可以正确模拟和验证service.getShipPhotos函数的调用情况了。

注意:以上代码示例中的YourService是一个示例服务名称,实际应根据具体情况替换为被测试的服务名称。另外,示例中使用的是Angular的测试框架,如果你使用的是其他框架或语言,可以根据相应的测试工具和语法进行调整。

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

相关·内容

写代码无BUG,网易云前端单元测试方案总结

karma 时会询问是否使用 RequireJS ,不过一般现在很少有人使用了。...Karma 本质上就是在本地启动一个web服务器,然后再启动一个外部浏览器加载一个引导脚本,这个脚本将我们所有的源文件和测试文件加载到浏览器中,最终就会在浏览器端执行我们的测试用例代码。...jasmine 如果在 Jasmine 中执行 DOM 级别的测试,就依然需要借助 Karma 或 JSDOM了,具体的配置这里就不再赘述。...总结下 Jasmine 的工具链 Node 环境下测试 : Jasmine + babel 模拟 JSDOM 测试 : Jasmine + JSDOM + babel 真实浏览器测试 : Karma +...jest.fn(); wrapper.setProps({ onClick: fn }); wrapper.update(); // 这里触发了两次点击事件,但是 onClick 只会被调用一次

9.6K20
  • Angular2 之 单元测试

    单元测试需要掌握的知识点 karma.conf.js的配置 具体了解到每一项的意义,这样才能真正的了解这个配置是如何配置的,甚至才可以做到自己的配置。...测试有依赖的组件,这个依赖的测试 这个依赖的模拟方式有两种:伪造服务实例(提供服务复制品)、刺探真实服务。这两种方式都不错,只需要挑选一种最适合你当前测试文件的测试方式来做最好。...比如,它不返回承诺,并且没有done方法可调用,因为它是标准的Jasmine异步测试程序。...你仍然可以将接受 done回的函数传给it。 但是,你必须链接承诺、处理错误,并在适当的时候调用done。...---- 多次调用同一个异步方法 相信大家对这段单元测试的代码很熟悉,这里就是模拟多次调用同一个方法时,返回不同的值。 这里是同步方法的模拟返回数据,那么异步方法同样可以。

    5.5K20

    前端测试体系建设与最佳实践总结

    技术选型 前端测试的框架可谓是百花齐放。 单元测试有 Mocha, Ava, Karma, Jest, Jasmine 等。...Karma 能在真实的浏览器中测试,强大适配器,可配置其他单测框架,一般会配合 Mocha 或 Jasmine 等一起使用。 每个框架都有自己的优缺点,没有最好的框架,只有最适合的框架。...Augular 的默认测试框架就是 Karma + Jasmine,而 React 的默认测试框架是 Jest. Jest 被各种 React 应用推荐和使用。...我们的测试点在加菜和减菜按钮的事件是否被正确触发,当数量为 0 时,减号按钮和数量是否展示,数量不为 0 时,展示是否正确。...只有单元测试和 UI 测试会计算到测试覆盖率,而 e2e 不会被计算进去。e2e 不需要写太多,因为大部分关键逻辑已经被单元测试覆盖,e2e 只需要简单的进行主流程的模拟

    5.3K30

    【干货分享】微信小程序单元测试攻略

    2,被测代码包含复杂的环境因素需要处理或模拟,例如使用了storage、调用了接口、使用了环境变量等。 (图片来源:码农翻身公众号) 但无论如何,有价值的东西就应该去做,不应该知难而退嘛。...示例:如何给一个提现弹窗写组件测试?...该方法和sinon.spy一样,生成函数的“间谍”,可以断言该函数的已调用次数、调用入参、调用返回等是否符合预期。...2.3.3 完整的断言方法 2.3.4 模拟数据mock 当被测方法包含环境因素不能直接测试时,例如使用了localStorage,又或者被测方法调用了接口,不希望测试调用接口影响业务或降低测试速度...axios.get('/api').then(res => res.data)} // 测试代码B import axios from 'axios';jest.mock('axios'); // 模拟一次接收到的数据

    2.7K40

    开源库架构实战——从0到1搭建属于你自己的开源库

    React 项目(但广泛支持各种项目) 比较新,社区还不是很成熟 Karma Google Angular 团队开源的 JavaScript测试执行过程管理工具 配置简单方便 强大适配器,可以在 karma...上面配置 jasmine,mocha 等单元测试框架 可提供真实的模拟环境,可以在 chrome,firefox 等各种浏览器环境进行配置 开发者可以自己把控整个自动化测试流程,实现更加自动化,当我们编辑保存的时候...但是在测试的开始阶段就遇到了一个问题,在浏览器原生移动端事件中,并没有一个像 click() 那样的方法可以供我们直接调用模拟事件触发,这个问题又该如何解决呢? ​...那么,当用户需要移除之前绑定的事件时,我们又该如何处理呢?用户传入的肯定是需要执行的回,而不是我们绑定在元素上的事件回。 ​...--摘自 阮一峰《ECMAScript 6 入门》 ​ weakmap.js 的意义在于建立 DOM 元素与对应 callback 的弱引用,在移除 DOM 元素时绑定在该元素上的回会被 GC

    1.3K20

    AngularDart 4.0 高级-生命周期钩子 顶

    如果它被定义了,Angular只会调用一个指令/组件钩子方法。...OnChanges 看看每次组件输入属性发生变化时,Angular如何用变更对象调用ngOnChanges钩子。 显示如何解释更改对象。...您不应该担心当在测试下创建或决定显示之前时新组件会尝试联系远程服务器。构造函数不应仅仅将初始局部变量设置为简单值。 ngOnInit是组件获取其初始数据的好地方。 教程和HTTP章节显示了如何。...取消注册此指令在全局或应用服务中注册的所有回。 如果你忽视这样做,你会冒内存泄漏的风险。...这个钩子以巨大的频率被调用 - 在每个变化检测周期之后,无论变化发生在何处。 在用户可以做任何事情之前,在这个例子中它被调用了二十次。

    6.2K10

    干货 | 如何一步步打造基于React的移动端SPA框架

    可以这么概括服务化,将一些特定功能由提供方以服务的形式提供出来,应用方不用关注其实现方式,只需关注调用功能即可。 服务化在后端很好理解,前端如何理解?...我们的这层处理方案:服务端和客户端用了两个不同React组件来处理,服务端组件仅包含首屏的数据结构,在服务端通过Node渲染好,呈现给用户和搜索引擎。...自动化单元测试Karma+ Jasmine配合Jenkins,Webpack,实现打包和构建前先运行单元测试。 10....这是我们的一个方向,我们现在单元测试这块主要做了一些必要逻辑的单元测试,未做到全系统。主要使用的框架:Karma + Jasmine。其中Jasmine负责测试代码部分,Karma负责自动化。...写单元测试要注意的几点: 不要写对接口返回结果测试的代码,那是接口测试的范畴。单元测试只关注传值是否正确。 业务代码不要写对框架方法的单元测试,业务代码只需要验证调用的方法和传值是否正确

    1.7K100

    Vue2的单元测试与调试技术

    的单元测试与调试技术; 利用Vue-cli的webpack方式,在提示使用哪种技术做单元测试时,选择karma即可,单元测试文件都被放在工程的test/unit/specs目录下,每个测试文件以*.spec.js...结尾,最简单测试一个我们的Label标签是否能被正确显示: 注:特别注意,如果您的项目中使用了Less,那么做单元测试时是无法识别Less变量的,所以应该剔除掉这些文件,方法是在unit/index.js...sinon,sinon将测试替身分为3种类型: Spies:模拟一个函数实现,检测函数调用的信息; Stubs:与Spies类似,但完全替换目标函数; Mocks:通过组合Spies和Stubs,使替换一个完整对象更容易...Nightwatch; 单元测试讲究局部的代码运行是否正确,端到端测试则是一种相对完整的外部模拟操作过程,通过借助Selemium服务器和WebDriver来模拟用户操作来完成,如以下脚本用来测试页面打开后是否有...$el拿到当前dom树,通过querySelector来筛选出对应的节点,并向这个dom节点调用dispathEvent函数即可,在处理用户输入时,做单元测试,并不需要模拟输入,而是将对应的绑定的v-model

    1.2K100

    2021 年 Node.js 开发人员学习路线图

    (Callback):回是特定任务执行完成后调用的函数,不影响其它代码的同时执行,避免了异步处理产生阻塞。鉴于 Node.js 中需处理大量的异步任务,因此回无处不在。...服务器的一部分内存用作缓存,存储降低应用网络调用所需的所有数据。...模拟测试(Mocking) 单元测试的规模越小越好,并尽可能轻量级执行。但在一些情况下,测试对象存在对其他对象的依赖。...运行 Mocking 测试不需要任何实际数据库,或是任何类型的连接,只返回给出预期结果的对象。Mocking 测试只使用一些基本对象,模拟给出实际测试结果,因此可摆脱所有局限更快地运行测试。...推荐阅读:下面资料分别介绍了如何使用 Sinon 和 Jasmine 实现 Mocking 测试: Sinon https://stackabuse.com/using-mocks-for-testing-in-javascript-with-sinon-js

    2.4K20

    国庆节前端技术栈充实计划(7):为 Vue 项目写单元测试

    然而,为了保证业务正常运行,我们的项目,每做一次更新,都要对所有功能做一次回归测试,随着项目的增大,重复的测试工作越来越多,越来越乏味,手工测试将变成一个恶心的事情。...我们创建一个基本的 to-do list 组件进行测试。我们将要测试的是,列表展示是否正确,用户是否可以正常添加到 to-do list。...通过这个教程,你将学会如何去为你的组件写一个测试测试包括HTML展示是否正确以及用户的操作是否能正常进行。 这里是这篇文章的所有代码。...测试依赖 Karma (v1.4) 是一个运行时,它产生一个 Web 服务环境来运行项目代码,并且执行测试。Mocha (v3.2) 是一个 JavaScript 测试框架。...首先,我们要测试的是数据的正确性。

    80930

    实例入门 Vue.js 单元测试

    ', function() { ... }); ... }); 1.6 spy 正如 spy 字面的意思一样,我们用这种“间谍”来“监视”函数的调用情况 通过对监视的函数进行包装,...,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试测试方法 广义的讲,以上的 spy 和 stub 等,以及一些对模块的模拟,对 ajax 返回值的模拟、对 timer 的模拟,...statement coverage):是否每个语句都执行了 分支覆盖率(branch coverage):是否每个if代码块都执行了 函数覆盖率(function coverage):是否每个函数都调用了...四个基础单词 编写单元测试的语法通常非常简单;对于jest来说,由于其内部使用了 Jasmine 2 来进行测试,故其用例语法与 Jasmine 相同。...一个被验证过针对给定的输入会渲染出符合期望的输出的组件,称为 测试通过的 组件; 一个 可测试的(testable) 组件意味着其易于测试 如何确保一个组件如期望的工作呢?

    2.9K20

    企业安全无间道之抓内鬼

    常见例如系统的开发人员可能知道产品的几个0DAY,离职员工掌握测试系统账号密码等。 从技术角度看,IT系统验证凭证有效性,允许访问资源。因此任何获得凭证的人都可被视为内部人员,也即访问角色。...而这个员工,就是间谍的一种,专门获取信息获利。 商业间谍在作案时间上和其他不同,他们可能偶然活跃一次,然后沉静下来,直到下一次。...启动调查的程序 有一些具体操作上需要特别列出来的注意事项: 背 员工入职一般都有背景调查,但这个是静态的,只是在入职时由外包进行调查。一旦本人发生变化,以前的背就没什么用了。...这些信息可能会被他周围的同事和HR知道,需要打通这个信息渠道。...5、服务端指标 对应的则是用户在服务端的操作行为: 指标 破坏 数据窃取 内部欺诈 商业间谍 无意 装逼犯 修改服务端日志 高 高 低 中 低 低 大量下载文档 低 高 低 高 低 中 服务端验证多次失败

    92510

    2021年Node.js开发人员学习路线图

    (Callback):回是特定任务执行完成后调用的函数,不影响其它代码的同时执行,避免了异步处理产生阻塞。鉴于 Node.js 中需处理大量的异步任务,因此回无处不在。...服务器的一部分内存用作缓存,存储降低应用网络调用所需的所有数据。...模拟测试(Mocking) 单元测试的规模越小越好,并尽可能轻量级执行。但在一些情况下,测试对象存在对其他对象的依赖。...运行 Mocking 测试不需要任何实际数据库,或是任何类型的连接,只返回给出预期结果的对象。Mocking 测试只使用一些基本对象,模拟给出实际测试结果,因此可摆脱所有局限更快地运行测试。...推荐阅读: 下面资料分别介绍了如何使用 Sinon 和 Jasmine 实现 Mocking 测试: Sinon https://stackabuse.com/using-mocks-for-testing-in-javascript-with-sinon-js

    2.6K20

    GitLab 是如何用 Headless Chrome 测试

    下面的例子介绍了GitLab如何切换到Headless Chrome GitLab最近从PhantomJS转变为Headless Chrome,用于前端测试和RSpec功能测试(ruby测试框架)。...前端测试Karma) 我们的前端测试套件是结合Karma测试运行器和Google Chrome配合使用,意外的简单(merge request(https://gitlab.com/gitlab-org...我们还删除了一些相当丑陋且特殊的PhantomJS hacks,Jasmine需要内嵌浏览器的功能。...最后,如果我们的测试是为了模拟一个真正的用户与页面交互,那我们应该做出真实的用户那样的行为。...(inject_headers: { 'Accept' => '*/*' }) do visit some_path end 这个中间件应该在堆栈的早期注入,以确保其它中间件拦截或修改请求/响应都会被我们的测试监测到

    3.2K80

    angular入门教程_初学者织围巾简单教程慢动作

    @angular/cli 默认生成的 karma.conf.js 配置文件里面采用了一个有 bug 的 html 报告生成器,导致 ng test 运行报错,我们需要把这个 reporter 改成mocha...在有了 NodeJS 之后,我们终于有了 Karma+Jasmine 这样的单元测试组合,也有了基于 WebDriverJS 这样的可以和浏览器进行通讯的集成测试神器。...就前端开发目前整体的状态来说,无论你使用什么框架,NodeJS、webpack、SASS、Karma+Jasmine、WebDriverJS 这个组合是无论如何绕不过去的。...@angular/cli 在开发 Angular 应用的时候,当然也离不开大量基于 NodeJS 的工具,我们需要 TypeScript compiler、webpack、KarmaJasmine、...模板字符串一般只会在第一次调用的时候编译一次,Handlebars 会把编译好的函数缓存起来,后面再次调用的时候会从缓存里面获取,而不会多次进行“编译”。

    3.3K20

    12条专业的JavaScript规则

    行内 JavaScript 在每次页面加载时都会重新下载,相反的,单独的 .js 文件则会被缓存起来。正如你所看到的,这个规则有助于支持如下一长串的其他规则。这就是为什么它的规则# 1。...然而,集成测试往往是脆弱的,所以我建议专注于自动化单元测试。自动化单元测试有多种选择。如果你是新手, 我建议你使用Jasmine,而如果你想要终极配置,可以使用Mocha with Chai。...JavaScript预计一年发布一次的新版本了,所以你可能一直需要transpiling 。 或者你喜欢强类型?那么你可以考虑 TypeScript。...10、JS应该自动构建 我们已经谈到了 linting、压缩、transpilation 和测试。但如何才能让这一切自动发生?很简单:使用自动构建。Gulp 就是这样一个结合了所有功能的工具。...编写JavaScript的时候应该像服务器端开发者那样思考问题。把你的业务逻辑和数据访问分离出来。 这意味着AJAX调用都应该在一个地方。创建一个集中的客户端“数据访问层”。

    1K90

    12条专业的JavaScript规则

    行内 JavaScript 在每次页面加载时都会重新下载,相反的,单独的 .js 文件则会被缓存起来。正如你所看到的,这个规则有助于支持如下一长串的其他规则。这就是为什么它的规则# 1。...然而,集成测试往往是脆弱的,所以我建议专注于自动化单元测试。自动化单元测试有多种选择。如果你是新手, 我建议你使用Jasmine,而如果你想要终极配置,可以使用Mocha with Chai。...JavaScript预计一年发布一次的新版本了,所以你可能一直需要transpiling 。 或者你喜欢强类型?那么你可以考虑 TypeScript。...10、JS应该自动构建 我们已经谈到了 linting、压缩、transpilation 和测试。但如何才能让这一切自动发生?很简单:使用自动构建。Gulp 就是这样一个结合了所有功能的工具。...编写JavaScript的时候应该像服务器端开发者那样思考问题。把你的业务逻辑和数据访问分离出来。 这意味着AJAX调用都应该在一个地方。创建一个集中的客户端“数据访问层”。

    87770

    sm羞耻任务_羞耻驱动的发展

    这不仅使人分心,而且意味着做正确的事情可能会慢得多。 原则上,将Easy Mock测试更改为JMock是一项相对简单的任务。...用了10分钟的时间向他解释了问题,然后又用了15分钟的解释原因,这是一次性使用的代码,因此没有任何单元测试。 我很不好意思。...但是,这里是我自己创建的一堆未经测试的代码。 为什么? 因为我原谅自己没有“做对了”。 毕竟,这只是一次性代码,不是吗? 这是探索性的,比生产代码更重要。...无论如何,一旦完成并迁移了测试,此代码将无用-那么为什么要使其漂亮呢? 我只是继续偷走…… 听起来多么合理,真是令人惊讶。 直到您意识到自己是个彻头彻尾的笨蛋。...现在,我可以在Jasmine中编写单元测试,以验证我正在编写的重构。 现在,我不仅可以正确测试驱动新代码。 我可以编写测试以涵盖现有的旧版代码,因此可以适当地对其进行重构。 惊人。

    3.9K10
    领券