标签: testdoublejs

你如何使用testdouble模拟typeorm的getManager?

在为typeorm创建单元测试时,我想模拟我与数据库的连接,这样我就可以运行单元测试,而无需连接到数据库(这是一件好事!)

我看到人们使用testdouble(我也在使用)嘲笑typeorm的存储库的地方,但我试图用getManager做这个,并且我正在解决如何使它工作的问题.

这是一个例子.我有一个类,在构造函数中,通过使用getManager()为名为'test'的连接创建一个EntityManager:

export class TestClass {
    constructor() {
        const test: EntityManager = getManager('test');
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想测试我可以简单地创建这个类.这是一个示例(使用mocha,chai和testdouble):

describe('data transformer tests', () => {
    it('can create the test class', () => {

        // somehow mock getManager here

        const testClass: TestClass = new TestClass();
        chai.expect(testClass, 'could not create TestClass').to.not.be.null;
    });
});
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我从typeorm获得此错误消息:

ConnectionNotFoundError: Connection "test" was not found.
Run Code Online (Sandbox Code Playgroud)

以下是我试图模拟getManager的一些事情:

td.func(getManager)
Run Code Online (Sandbox Code Playgroud)

与上面相同的错误.

td.when(getManager).thenReturn(td.object('EntityMananger'));
Run Code Online (Sandbox Code Playgroud)

得到消息:

Error: testdouble.js - td.when - No test double invocation call detected …
Run Code Online (Sandbox Code Playgroud)

unit-testing node.js typescript typeorm testdoublejs

13
推荐指数
1
解决办法
2326
查看次数

使用testdoublejs测试多个策略的Promise

testdouble在node.js项目中用于存根调用.这个特殊的功能是包装一个promise并then在函数本身内有多个调用.

function getUser (rethink, username) {
  return new Promise((resolve, reject) => {
  let r = database.connect();
  r.then(conn => database.table(tablename).filter({username}))
   .then(data => resolve(data))
   .error(err => reject(err));
 });
}
Run Code Online (Sandbox Code Playgroud)

所以我想确定是否根据错误条件正确处理resolvereject处理.假设我需要验证一些自定义逻辑.

为了我的考试

import getUser from './user';
import td from 'testdouble';
test(t => {
  const db = td.object();
  const connect = td.function();
  td.when(connect('options')).thenResolve();
  const result = getUser(db, 'testuser');
  t.verify(result);
}
Run Code Online (Sandbox Code Playgroud)

问题是connect的结果需要是一个promise,所以我使用一个值来解析,该值需要是另一个解析或拒绝的promise.

与之相关的database.connect()是不是承诺的结果.

TypeError: Cannot read property 'then' of undefined
Run Code Online (Sandbox Code Playgroud)

任何人都可以成功使用Test Double来阻止这种类型的通话吗?

node.js rethinkdb test-double testdoublejs

10
推荐指数
1
解决办法
734
查看次数