Jasmine angularjs - 监视控制器初始化时调用的方法

2024-01-08

我目前正在使用 Jasmine 与 Karma(Testaulous) 和 Web Storm 来编写单元测试。我在监视控制器初始化时立即调用的方法时遇到问题。是否可以监视控制器初始化时调用的方法?

我的控制器代码,我试图监视的方法是getServicesNodeList().

myApp.controller('TreeViewController', function ($scope, $rootScope ,$document, DataServices) {
    $scope.treeCollection  =  DataServices.getServicesNodeList();
    $rootScope.viewportHeight = ($document.height() - 100) + 'px';
});

这是测试规范:

describe("DataServices Controllers - ", function () {

beforeEach(angular.mock.module('myApp'));
describe("DataServicesTreeview Controller - ", function () {


    beforeEach(inject(function ($controller, $rootScope, $document, $httpBackend, DataServices) {
        scope = $rootScope.$new(),
        doc = $document,
        rootScope = $rootScope;
        dataServices = DataServices;

        $httpBackend.when('GET', '/scripts/internal/servicedata/services.json').respond(...);

        var controller = $controller('TreeViewController', {$scope: scope, $rootScope: rootScope, $document: doc, DataServices: dataServices });

        $httpBackend.flush();
    }));

    afterEach(inject(function($httpBackend){
        $httpBackend.verifyNoOutstandingExpectation();
        $httpBackend.verifyNoOutstandingRequest();
    }));

    it('should ensure DataServices.getServicesNodeList() was called', inject(function ($httpBackend, DataServices) {
        spyOn(DataServices, "getServicesNodeList").andCallThrough();

        $httpBackend.flush();
        expect(DataServices.getServicesNodeList).toHaveBeenCalled();
    }));


});
});

测试失败,表明该方法尚未被调用。我知道我应该嘲笑DataServices并将其传递到测试控制器中。但在监视该方法时,无论它是否是模拟,我似乎仍然会遇到同样的问题。任何人有任何想法或可以向我指出处理此问题的正确方法的资源吗?


编写单元测试时,应该隔离每段代码。在这种情况下,您需要隔离您的服务并单独进行测试。创建服务的模拟并将其传递给您的控制器。

var mockDataServices = {
    getServicesNodeList: function () {
        return <insert your sample data here > ;
    }
};

beforeEach(inject(function ($controller, $rootScope, $document) {
    scope = $rootScope.$new(),
    doc = $document,
    rootScope = $rootScope;

    var controller = $controller('TreeViewController', {
        $scope: scope,
        $rootScope: rootScope,
        $document: doc,
        DataServices: mockDataServices
    });
}));

如果是您的服务发出 $http 请求,您可以从单元控制器测试中删除该部分。编写另一个单元测试来测试服务在初始化时是否进行正确的 http 调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jasmine angularjs - 监视控制器初始化时调用的方法 的相关文章

随机推荐

  • C 中的 Boost 类似库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您能否推荐我可以在 C 环境中使用的同行评审库 例如 Boost for C 提供哈希 线程 进程间通
  • 将数据从 Microsoft SQL Server 读取到 R 中

    是否可以从 R 接口读取 MS SQL Server 中存储的数据 如果是的话 如果有人能告诉我如何做到这一点 我也会很感激 尝试过RODBC已经打包了吗 http cran r project org web packages RODBC
  • MVC 授权属性拒绝

    我正在使用Authorize 属性来保护我的控制器 操作 并且只想向未经身份验证的用户显示登录操作 或者换句话说 拒绝对经过身份验证的用户的访问 我在网上找不到任何涉及拒绝权限或允许负面权限 即 LoggedIn 的内容 有人可以指出我正确
  • 让 ORMLite 对结构使用正确的序列化

    tl dr 我正在结构上注册序列化器和反序列化器 序列化器未被调用 但解串器被调用 我怎样才能解决这个问题 它适用于引用类型 并且执行JsConfig
  • 如何在 C# 中进行非阻塞套接字调用来确定连接状态?

    Socket 上 Connected 属性的 MSDN 文档说明如下 Connected 属性的值 反映连接的状态 截至最近一次操作 如果 你需要确定当前 连接状态 进行 非阻塞 零字节发送调用 如果 调用成功返回或 抛出 WAEWOULD
  • CefSharp 中的可拖动无边框窗口

    我想在某些 HTML 元素上实现带有拖动逻辑的无边框窗口 我找到了一些工作示例 例如适用于 Chrome 的无框窗口 https chrome google com webstore detail frameless window samp
  • iOS6 中的 CoreMIDI/PGMidi 虚拟 midi 错误

    面临两个错误 此代码在 iOS 4 和 5 中有效 但更新到 6 后 它不起作用 我发现了以下内容 但不知道如何在代码中修复它 从 iOS 6 开始 应用程序需要在其 UIBackgroundModes 中拥有音频键才能使用 CoreMID
  • Mvvm交叉绑定

    我尝试将小部件绑定到视图模型属性 但出现异常 MvxBind Warning 14 76 Failed to create target binding for binding Signature for Order ClientSigna
  • 创建 WCF 消息的缓冲副本

    我在消息检查器中有以下代码来检查响应正文 我知道 WCF 消息只能读取一次 因此我首先创建一个副本 但使用以下代码我仍然收到错误 此消息无法支持该操作 因为它已被读取 我错过了什么吗 MessageBuffer buffer message
  • Firefox 扩展自定义字体

    我正在使用 Firefox Add on SDK 创建扩展并执行 PageMod 这段代码位于main js exports main function var pageMod require sdk page mod pageMod Pa
  • django-allauth:模块“accounts.forms”未定义“SignupForm”类

    我收到以下错误 django core exceptions ImproperlyConfigured 模块 accounts forms 没有定义 SignupForm 类 设置 py ACCOUNT SIGNUP FORM CLASS
  • 动态设置错误动作的布局文件

    我知道有不同的方法来选择布局文件 可以办到 在配置中 with Yii app gt layout with Controller layout 我有一些使用不同布局文件的控制器 如下所示 class FirstController ext
  • 我应该模拟与我的测试对象交互的所有对象吗?

    我正在努力知道如何决定应该模拟与我的测试对象交互的哪些对象 class MyClass private Customer customer private Invoice invoice private PrintService ps pr
  • 在 .NET 中初始化空变量

    在 NET 中初始化 null 变量的正确方法是什么 我的一位同事告诉我 将变量硬定义为 null 会降低速度 int var1 good practice string s1 good practice int var2 0 bad pr
  • 如何使用 Java HttpServer/HttpExchange 获取 GET 中的查询字符串?

    我正在尝试用 Java 创建一个简单的 HttpServer 来处理 GET 请求 但是当我尝试获取请求的 GET 参数时 我注意到 HttpExchange 类没有相应的方法 有人知道读取 GET 参数 查询字符串 的简单方法吗 这就是我
  • NgStyle 返回:ERROR 错误:找不到不同的支持对象 '{"background-color":"blue"}'

    在我的模板中使用这个 span HELLO span 在我的组件中 myStyle string return background color blue 我越来越 ERROR Error Cannot find a differ supp
  • css 过渡不透明度淡入淡出背景

    我正在做一个transition当用户将鼠标悬停在图像上时 它会淡入透明白色 我的问题是我需要将颜色更改为黑色 我尝试过简单地添加background black 到包含的类transition 但不幸的是它不起作用 它仍然褪成白色透明 我
  • 是否可以继承 C++11 智能指针并覆盖相关运算符?

    根据cppreference com http en cppreference com w cpp memory shared ptr std shared ptr提供了一整套相对运算符 出于某些目的 我更希望使用相对运算符来根据比较引用的
  • 如何从html图像标签获取class和src

    我想检索课程并src使用正则表达式的图像标签 的位置class and src可以在任何地方 我能够得到src from
  • Jasmine angularjs - 监视控制器初始化时调用的方法

    我目前正在使用 Jasmine 与 Karma Testaulous 和 Web Storm 来编写单元测试 我在监视控制器初始化时立即调用的方法时遇到问题 是否可以监视控制器初始化时调用的方法 我的控制器代码 我试图监视的方法是getSe