小编Amy*_*ini的帖子

将模拟注入AngularJS服务

我写了一个AngularJS服务,我想对它进行单元测试.

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) {

    this.something = function() {
        // Do something with the injected services
    };

    return this;
});
Run Code Online (Sandbox Code Playgroud)

我的app.js文件已注册:

angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)
Run Code Online (Sandbox Code Playgroud)

我可以测试DI是这样工作的:

describe("Using the DI framework", function() {
    beforeEach(module('fooServiceProvider'));
    beforeEach(module('barServiceProvider'));
    beforeEach(module('myServiceProvder'));

    var service;

    beforeEach(inject(function(fooService, barService, myService) {
        service=myService;
    }));

    it("can be instantiated", function() {
        expect(service).not.toBeNull();
    });
});
Run Code Online (Sandbox Code Playgroud)

这证明了服务可以由DI框架创建,但是接下来我想对服务进行单元测试,这意味着模拟注入的对象.

我该怎么做呢?

我已经尝试将模拟对象放在模块中,例如

beforeEach(module(mockNavigationService));
Run Code Online (Sandbox Code Playgroud)

并将服务定义重写为:

function MyService(http, fooService, barService) {
    this.somthing = function() {
        // Do something with the injected services
    };
});

angular.module('myServiceProvider', …
Run Code Online (Sandbox Code Playgroud)

javascript mocking jasmine angularjs angularjs-service

114
推荐指数
1
解决办法
10万
查看次数

TypeError:尝试分配给readonly属性

在为指令编写测试时,我遇到了这个错误(使用generator-angular-module):

SRC/capitalize.js:

'use strict';

angular.module('jviotti.string', []).filter('capitalize', function() {

  return function(input) {
    return input.replace(/\w\S*/g, function(txt) {
      return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
    });
  };

});
Run Code Online (Sandbox Code Playgroud)

测试/规格/ capitalize.js:

'use strict';

describe('Filter: capitalize', function () {

  // load the controller's module
  beforeEach(module('jviotti.string'));

  var capitalize;
  beforeEach(inject(function($filter) {
    capitalize = $filter('capitalize');
  }));

  it('should capitalize a string', function () {
    expect(capitalize('hello')).toBe('Hello');
  });

});
Run Code Online (Sandbox Code Playgroud)

但是,当使用PhantomJS运行Karma时,我得到:

PhantomJS 1.9.2 (Mac OS X) Filter: capitalize should capitalize a string FAILED
    TypeError: Attempted to assign to readonly property.
        at workFn (/Users/jviotti/Projects/angular-string/bower_components/angular-mocks/angular-mocks.js:2107) …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing angularjs karma-runner

14
推荐指数
2
解决办法
3万
查看次数

实时重新加载,热重新加载和热模块替换之间的概念差异是什么?

我已经看过很多关于实时重新加载,热重新加载热模块替换的帖子和出版物,指的是在Web客户端/ FE层工作时,在浏览器中立即反映代码变化的不同实践.

我对这些术语的含义有一个公平的理解,我唯一的问题是这些概念是否在某个地方得到了适当的定义,以及它们之间的具体差异.

reload livereload hot-module-replacement

13
推荐指数
1
解决办法
942
查看次数

React Native/TypeScript/测试库/Jest 的设置不起作用

我正在尝试设置一个 React Native/TypeScript 应用程序以使用 Jest 进行测试@testing-library/react-native

到目前为止我收到这个错误:

Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: object.
Run Code Online (Sandbox Code Playgroud)

之前我遇到了一个Missing class properties transform错误,所以我添加@babel/plugin-proposal-class-properties到了原始引导中已经包含的 Babel 配置expo init,但是一旦我这样做了,我就会得到另一个错误,并且到目前为止我尝试过的任何方法都不起作用。

这是我的 babel 配置:

module.exports = function(api) {
  api.cache(true);
  return {
    presets: [
      "babel-preset-expo",
      ["@babel/preset-env", { targets: { node: "current" } }],
      "@babel/preset-typescript"
    ],
    plugins: ["@babel/plugin-proposal-class-properties"]
  };
};
Run Code Online (Sandbox Code Playgroud)

和我的 Jest 配置:

"jest": {
   "preset": "react-native"
}
Run Code Online (Sandbox Code Playgroud)

破断测试:

import …
Run Code Online (Sandbox Code Playgroud)

typescript jestjs babeljs react-native react-native-testing-library

6
推荐指数
0
解决办法
705
查看次数