Ant*_*tWo 5 unit-testing ionic-framework angular
我正在尝试创建一个模拟服务,但我收到一个错误“类型有一个私有属性的单独声明”,对我来说,声明似乎是平等的,但没有不同,但它说不在错误中。我正在一个注入了服务的组件中进行此测试!!!是的,我想在这里用模拟测试来测试它。
我的模拟服务代码:
class MockDataservice {
result: any;
constructor(private http: HttpClient){
sendCodeToServer() {
return this.result;
}
}
describe('HomePage', () =>
...
{
...
beforeEach(() => {
...
service = new MockDataservice(http);
component = new HomePage(platform, service, splash, statusbar, barcode, alert, http, loading, router);
Run Code Online (Sandbox Code Playgroud)
原服务:
export class DataStorageService {
result: any;
constructor(private http: HttpClient) {
}
sendToServer(data) {
const headers = new HttpHeaders().set('Content-Type', 'application/json');
return new Promise((resolve, reject) => {
this.http.post(endpoindURL, data, { headers: headers })
.toPromise().then((data) => {
resolve(data);
}).catch((err) => {
console.log(err);
reject(err);
});
});
}
}
Run Code Online (Sandbox Code Playgroud)
组件中的服务使用:
export class HomePage {
barcodeScannerOptions: BarcodeScannerOptions;
constructor(private platform: Platform, private **dataStorageService**:
DataStorageService,
private splashScreen: SplashScreen,
private statusBar: StatusBar, private barcodeScanner: BarcodeScanner, public
alertController: AlertController,
private http: HttpClient, private loadingController: LoadingController,
private router: Router) {
this.initializeApp();
this.barcodeScannerOptions = {
showTorchButton: true,
showFlipCameraButton: true
};
}
function doesSomething(){
this.dataStorageService.sendToServer(data).then((res) => {
}
Run Code Online (Sandbox Code Playgroud)
我在 home.spec 文件中的 word service 中收到错误
组件 = 新主页(平台、服务、启动画面、状态栏、条形码、警报、http、加载、路由器);
错误是
MockDataservice 不可分配给 //DataStorageService 类型的参数。类型有一个私有属性 http.ts 的单独声明
fjc*_*fjc 14
所以这是正在发生的事情的详尽答案。我构建了一个重现行为的最小示例:TypeScript Playground 上的 Broken example。您实际上可以看到完全相同的错误消息。
这是怎么回事?该Component预计实际的实例Service在其构造类。MockService 是不是一个Service。它只是巧合地具有相同的构造函数参数和相同的方法名称。编译器不知道两者实际上是兼容的(即实现相同的接口),因此会抛出错误。
我们如何解决这个问题?使用实际的面向对象抽象。由于Service和MockService实际上是可以互换的,我们需要让编译器知道这一点。我们怎么做?通过让它们实现相同的接口。
我们将只定义一个Service接口。我们将有一个ConcreteService,它包含默认行为,并实现Service. 我们还将有我们的MockService,它将实现相同的Service,但具有模拟行为:TypeScript playground 上的工作示例。,
| 归档时间: |
|
| 查看次数: |
9111 次 |
| 最近记录: |