我写了一个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) 在为指令编写测试时,我遇到了这个错误(使用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) 我已经看过很多关于实时重新加载,热重新加载和热模块替换的帖子和出版物,指的是在Web客户端/ FE层工作时,在浏览器中立即反映代码变化的不同实践.
我对这些术语的含义有一个公平的理解,我唯一的问题是这些概念是否在某个地方得到了适当的定义,以及它们之间的具体差异.
我正在尝试设置一个 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
angularjs ×2
javascript ×2
babeljs ×1
jasmine ×1
jestjs ×1
karma-runner ×1
livereload ×1
mocking ×1
react-native ×1
react-native-testing-library ×1
reload ×1
typescript ×1
unit-testing ×1