代码之家  ›  专栏  ›  技术社区  ›  Carson

在测试中解析csv stringify promise还是在调用函数时结束测试?

  •  0
  • Carson  · 技术社区  · 6 年前

    我试着用angularjs模拟csv stringify…但我只想获取传入的两个参数,并在稍后的测试中使用它们来测试某些选项是否正确。

    it("converts latitude and longitude correctly", function() {
      this.CSV._stringifyPromise._setResolveMode("instant");
      var csvFeatures, csvOptions;
      this.CSV.stringify.and.callFake(function(csvFeaturesInStringify,
        csvOptionsInStringify) {
        csvFeatures = csvFeaturesInStringify;
        csvOptions = csvOptionsInStringify;
      });
    
      this.featureExportCSVService.buildCsvFile(this.features, "Test");
      expect(this.csvOptions[0].LONG).toEqual(this.features[0].geometry.coordinates[
        0].toString());
      expect(this.csvOptions[0].LAT).toEqual(this.features[0].geometry.coordinates[
        1].toString());
    });
    

    我相信csv stringify在所谓的非测试代码中返回了一个承诺…

        CSV.stringify(csvObject.features, csvObject.options)
          .then(function(result) { ... }
    

    我以为这只是在我的假呼叫返回结果,但这似乎不起作用。

      this.CSV.stringify.and.callFake(function(csvFeaturesInStringify,
        csvOptionsInStringify) {
        expect(...);
        expect(...);
        return "test,blah,blah";
      });
    

    我试过用 $q.defer().resolve(); 但是 $q 没有定义。做退货,上面写着 undefined is not a constructor

    我如何解析这个函数来返回一个伪字符串,或者在这里结束测试并计算 expect() 电话?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Carson    6 年前

    需要用一个then函数和一个successcallback调用这样的返回….

      this.CSV.stringify.and.callFake(function(csvFeaturesInStringify, csvOptionsInStringify) {
        csvFeatures = csvFeaturesInStringify;
        return {
          then: function(successCallback) {
            successCallback("geometry,LAT,LONG,name,marker-color");
          }
        };
    

    然后,在最终到达该方法的函数调用之后,需要将expect块放在这里而不是放在这里。

      this.featureExportCSVService.buildCsvFile(this.features, "Test");
      expect(this.csvOptions[0].LONG).toEqual(this.features[0].geometry.coordinates[
        0].toString());
      expect(this.csvOptions[0].LAT).toEqual(this.features[0].geometry.coordinates[
        1].toString());