使用我自己的observable时,RxJS大理石测试失败,而不是使用createHotObservable方法创建一个

时间:2017-11-15 17:20:25

标签: testing rxjs marble

我正在尝试用RxJS弹珠创建一个简单的测试。

我正在使用摩卡和柴。

我正在实例化一个新的测试调度程序,我不想使用" testScheduler.createHotObservable方法"因为我想使用我自己的Observable," Observable.of(4)"

 const testScheduler = new TestScheduler(assert.deepEqual.bind(assert));

      const expected = "a";
      const expectedStateMap = {
        a: 4
      };

      testScheduler.expectObservable(Observable.of(4)).toBe(expected, expectedStateMap);

      testScheduler.flush();

这是错误:

 AssertionError: expected [ Array(2) ] to deeply equal [ Array(1) ]
      + expected - actual

           "notification": {
             "error": [undefined]
             "hasValue": true
             "kind": "N"
      -      "value": 4
      +      "value": "4"
           }
         }
      -  {
      -    "frame": 0
      -    "notification": {
      -      "error": [undefined]
      -      "hasValue": false
      -      "kind": "C"
      -      "value": [undefined]
      -    }
      -  }
       ]

      at TestScheduler.flush (node_modules/rxjs/src/testing/TestScheduler.ts:135:12)

任何想法有什么不对?

2 个答案:

答案 0 :(得分:1)

是的,它不起作用。 hotcold可观察创建方法的作用是,在testscheduler内部基于给定的大理石和setup创建可观察对象。当testcheduler通过flush执行时,它会迭代所有可观察和刷新。如果提供了custom observable,则testscheduler不知道那些可观察的是否存在,而不是那些可以观察到的。

这只是当前测试调度程序实现的限制 - 除非猴子补丁测试调度程序接受自定义可观察性,否则它可能无法按预期工作。

答案 1 :(得分:1)

你忘了填写Observable。

#include <iostream>
#include <string>
#include <array>
#include <cstdlib>
#include <fstream>
using namespace std;
ifstream read;
ofstream write;

void store_names(string a [10])
{
    string storage;
    read.open("Data.txt"); //open file
    if (read.is_open()==true)// check to see if file is open
    {
        for (int i = 0; i < 10; i++)
        {
            read >> a[i];
            read.ignore(256, '\n');//store file string into array
            cout << a[i] << endl;
        }
    }
}

void store_payments(double payment [10][3])
{
    read.open("Data.txt");
    if (read.is_open() == true)
    {
        for (int i = 0; i < 10; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                read.ignore(7, '\n');
                read >> payment[i][j];
                cout << payment[j];
            }
        }
    }
}

int main()
{
    string name_array[10];
    double payment[10][3];
    store_names(name_array);
    store_payments(payment);

    system("pause");
    return 0;
}

可以重构为

  const expected = "a";
  const expectedStateMap = {
    a: 4
  };