angular - 笑话:无法在构造函数中使用参数测试特定类
问题描述
我使用 Jest 作为单元测试框架。我想测试一个名为 EDVApi (edv.ts) 的类:
import { Http } from '@angular/http';
import { File } from '@ionic-native/file';
import { FilePath } from '@ionic-native/file-path';
import {Headers} from '@angular/http';
import {RequestOptions} from '@angular/http';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/share';
import {Response} from '@angular/http/src/static_response';
import { Inject } from '@angular/core';
export default class EDVApi {
webservice: any = "https://XXX.XXX.XXX.XXX:YYYYY/";
public constructor(public http: Http) {
console.log('EDVApi created.');
}
login(loginData) {
let headers = new Headers();
let data = {
loginData: loginData
};
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({
headers: headers,
body: JSON.stringify(data)
});
return this.http.post(this.webservice + "login", data, options);
}
public sum(a,b){
return a+b;
}
}
在我的测试类中,我想测试 EDVApi 的函数 sum:
import EDVApi from './edv';
import 'jest';
jest.mock('./edv');
describe('EDV Tests', () => {
it('Sum 1+2 should be 3', () => {
const mockEDV = EDVApi.mock.instances[0];
expect(mockEDV.sum(1,2)).toBe(3);
});
});
当我尝试编译我的代码时,cli 给了我以下错误:“typeof EDVApi”类型上不存在属性“mock”。当我运行npm test
Jest 测试失败并显示以下消息:
the module which has no default export › Sum 1+2 should be 3
TypeError: Cannot read property 'mock' of undefined
5 | describe('the module which has no default export', () => {
6 | it('Sum 1+2 should be 3', () => {
> 7 | const mockEDV = EDVApi.mock.instances[0];
8 | expect(mockEDV.sum(1,2)).toBe(3);
9 | });
10 | });
at Object.<anonymous> (src/edv.test.ts:7:28)
FAIL src\edv.test.ts ● 测试套件未能运行
TypeError: Cannot read property 'Symbol' of undefined
> 1 |
2 | import { Http } from '@angular/http';
3 | import { File } from '@ionic-native/file';
4 |
at Object.<anonymous> (node_modules/rxjs/symbol/rxSubscriber.js:3:26)
at Object.<anonymous> (node_modules/rxjs/Subscriber.js:10:22)
at Object.<anonymous> (node_modules/rxjs/util/toSubscriber.js:2:20)
at Object.<anonymous> (node_modules/rxjs/Observable.js:3:22)
at Object.<anonymous>.Object.setPrototypeOf.__proto__ (node_modules/@angular/core/bundles/core.umd.js:7:82)
at Object.<anonymous> (node_modules/@angular/core/bundles/core.umd.js:10:2)
at Object.<anonymous>.Object.setPrototypeOf.__proto__ (node_modules/@angular/http/bundles/http.umd.js:7:82)
at Object.<anonymous> (node_modules/@angular/http/bundles/http.umd.js:10:2)
at Object.<anonymous> (src/edv.ts:1:52054)
at Object.<anonymous> (src/edv.test.ts:3:31)
我尝试了许多不同的解决方案,如官方 Jest 文档中所述,但无法解决此问题。有什么建议么?
解决方案
推荐阅读
- node-red - 在 NODE-Red 中获得双重消息
- python - 如何在 Python 中使用单个变量删除 2 列
- c++ - 相同的功能,不同的参数
- javascript - 使用javascript在testcafe中跨测试调用元素
- amazon-web-services - 从另一个区域调用 AWS Textract
- ionic-framework - 如何使用登录页面做一个延迟加载的离子框架应用程序
- google-chrome - 我们如何为上下文菜单添加弹出窗口
- database - 如何在骡子中仅将甚至记录数据插入数据库?
- ruby-on-rails - 带有 Sidekiq 后端的 ActiveJob 将复杂对象作为参数传递
- powershell - 从 System.Diagnostics.EventLogEntry 获取事件的详细信息