小编Mar*_*rök的帖子

Angular 2:在valueChanges之后更新FormControl验证器

有没有办法更新ValidtorsFormControl对象?我有FormGroup一个输入是一个选择字段,当选择字段的值更改时,我希望我的FormGroup中的另一个FormControl更改验证器.

这是我的subscribeToFormChanges()FormGroup组件的方法:

private appIdRegexes = {
    ios: /^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z0-9\-]+){2,}$/,
    android: /^([a-zA-Z])[a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9\-]*){2,}$/,
    any: /^any$/
  };

private subscribeToFormChanges(): void {
    const myFormValueChanges$ = this.appsForm.valueChanges;
    myFormValueChanges$.subscribe(x => {
      const platform = this.appsForm.controls['platform'].value;
      const appId = this.appsForm.controls['appId'].value;

      if (this.appIdRegexes[platform]) {
        this.appsForm.controls['appId'] = new FormControl(appId, Validators.pattern(this.appIdRegexes[platform].source));
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

这是html模板:

<div class="row" [formGroup]="appsForm">
  <div class="form-group col-xs-6">
    <label>Platform</label>

    <select id="licensePlatform" class="form-control"
            formControlName="platform">
      <option *ngFor="let platform of licensePlatforms" [value]="platform">
        {{platform}}
      </option>
    </select>

    <small [hidden]="appsForm.controls.platform.valid">
      Platform is required
    </small>
  </div>

  <div class="form-goup col-xs-6"> …
Run Code Online (Sandbox Code Playgroud)

javascript typescript angular

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

如何使用Jest在TypeScript中模拟导入的函数?

我有一个名为的模块map-creation.service.ts

export const createMap = (asyncJobId: string, resourceUrl: string, s3DestFolder: string) => {

};
Run Code Online (Sandbox Code Playgroud)

在我的端点中使用了哪个:

import {createMap} from './services/map-creation.service';

const router = express.Router();
const routePrefix = config.get('server.routePrefix');

router.post(`/${routePrefix}`, validate(validation), (req: express.Request, res: express.Response) => {
    createMap(req.body.asyncJobId, req.body.resourceUrl, req.body.s3DestFolder);
    res.status(201).json({message: 'Created'});
});
Run Code Online (Sandbox Code Playgroud)

当我尝试在测试中模拟该模块,并想测试在请求端点时是否调用了该模块时,我仍然得到: Expected mock function to have been called with: ... But it was not called.

jest.mock('../../../src/services/map-creation.service');
import {createMap} from '../../../src/services/map-creation.service';
Run Code Online (Sandbox Code Playgroud)

这是我的测试:

it('should call the map-creation service', () => {
        return request(server)
            .post(`/${routePrefix}`)
            .send({
                asyncJobId,
                resourceUrl,
                s3DestFolder
            }) …
Run Code Online (Sandbox Code Playgroud)

unit-testing mocking typescript jestjs

5
推荐指数
1
解决办法
3372
查看次数

标签 统计

typescript ×2

angular ×1

javascript ×1

jestjs ×1

mocking ×1

unit-testing ×1