【问题标题】:Unit test on Meteor server side TypeScriptMeteor 服务器端 TypeScript 的单元测试
【发布时间】:2018-04-11 12:17:34
【问题描述】:

我的服务器端单元测试有问题。

接下来是我的测试:

import { Meteor } from 'meteor/meteor';
import { Article } from '../../../imports/models/article';
import { Articles } from '../../../imports/collections/articles';
import './articles';
import { Random } from 'meteor/random';
import {Rate} from "../../../imports/models/rate.model";
import { expect, assert } from 'chai';
import {Observable} from "rxjs/Observable";

if (Meteor.isServer) {
    describe('Articles', () => {

        const userId = Random.id();

        beforeEach(() => {
            StubCollections.add([Articles]);
            StubCollections.stub();
            Articles.remove({});
        });

        it('can delete owned article', async (done) => {

            const articleId = await Articles.insert({
                title: "string",
                content: "string",
                owner: userId,
                picture_url: "string",
                source: "string",
                createdAt: new Date()
            }).toPromise();


            const deleteArticle = Meteor.server.method_handlers["removeArticle"];
            // // Run the method with `this` set to the fake invocation
            //`enter code here`
            const invocation = {userId};

            deleteArticle.apply(invocation, [articleId]);

            console.log(articleId);

            const count = await Articles.find({}).count().toPromise();

            // Verify that the method does what we expected
            expect(count).equal(0);
            StubCollections.restore();
            done()
        });
    });
}

我无法导入存根集合,因为 typescript 没有找到它。

我曾尝试在 tsconfig.json 上安装流星服务器包,但没有成功。

当我删除 StubCollection 时,“Articles.find({})”的超时时间为 2 秒

你有解决办法吗?

【问题讨论】:

    标签: unit-testing typescript meteor import server-side


    【解决方案1】:

    我的问题是带有 Meteor.observable 的 Observable 类型的 Article.find({}) 结果。

    我的新测试是下一个

        it('can delete owned article', async done => {
    
            let fixFindToPromise: number  = 0;
    
            const articleId = await Articles.insert({
                title: "string",
                content: "string",
                owner: userId,
                picture_url: "string",
                source: "string",
                createdAt: new Date()
            }).toPromise();
            // console.log('A2', articleId2);
    
            const deleteArticle = Meteor.server.method_handlers["removeArticle"];
            // Run the method with `this` set to the fake invocation
            deleteArticle.apply({userId}, [articleId]);
    
    
            // Find the internal implementation of the task method so we can
            console.log("ArticleId:", articleId);
    
            Articles.find().subscribe((countLog) => {
                fixFindToPromise++;
    
                if (fixFindToPromise == 1 ) {
                    if ( countLog.length == 0 ) {
                        done();
                    } else {
                        done("Count not correct");
                    }
                }
            });
    

    是否可以使用具有 promise 兼容性结果的 find 方法以获得更好的语法并使用 assert 和 expect ? 在打字稿单元测试服务器端是否存在导入包的项目或解决方案?

    感谢您的回复

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 2023-03-16
      • 2012-06-17
      • 1970-01-01
      • 2015-03-20
      • 2015-04-22
      • 2012-01-06
      相关资源
      最近更新 更多