Я пытаюсь запустить автоматические тесты для сервиса web3, выполненного в Angular 6. Я новичок в этом виде тестов, и еще новее в библиотеке web3.
Сервис:
import { Injectable, InjectionToken, Inject } from '@angular/core';
import Web3 from 'web3';
declare let require: any;
const buttonABI = require('../../assets/abi/Button.json');
export const WEB3 = new InjectionToken<Web3>('web3', {
providedIn: 'root',
factory: () => {
if (Web3) {
const resp = new Web3(Web3.givenProvider || 'http://localhost:7545');
return resp;
} else {
console.log('No web3? You should consider trying MetaMask!');
}
}
});
@Injectable({
providedIn: 'root'
})
export class CoreService {
private account = null;
constructor(@Inject(WEB3) private web3: any, private http: Http) {
}
public async getAccount() {
if (this.account === null) {
return (await this.web3.eth.getAccounts())[0];
}
}
}
Тест:
describe('AppComponent', () => {
let service: any;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AppComponent],
imports: [HttpClientTestingModule, HttpModule],
providers: [CoreService, { provide: XHRBackend, useClass: MockBackend }]
}).compileComponents();
service = new CoreService(
new Web3(Web3.givenProvider || 'http://localhost:7545'),
null
);
}));
it('should create the app', async(() => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
it('should get first account', () => {
console.log(service);
service
.getAccount()
.then(resp => {
console.log(resp);
// expect(resp).toBe(1);
})
.catch(err => {
console.log(err);
});
});
В этой строке:
new Web3(Web3.givenProvider || 'http://localhost:7545')
Второй параметр - это экземпляр Ganache, к которому он без проблем подключится, но еслиЯ вынимаю этот параметр и заставляю его использовать Web3.givenProvider, чтобы соединиться с Metamask и Rinkeby, я всегда получаю ноль.
Не могу найти ни одного примера в Интернете.
У васесть намеки на это?Заранее большое спасибо!