howto单元测试一个yeoman发电机

时间:2017-09-11 06:34:54

标签: unit-testing yeoman

我看了http://yeoman.io/authoring/testing.html的官方指南 但它让我有点困惑。 helpers.run返回一个运行的上下文,我可以在其上调用方法等。 但我很困惑如何测试文件是否存在(assert.file) 我的印象是helpers.run将在内存或文件系统上创建文件。但assert.file总是失败。 在运行测试之前,文件系统上存在的文件不会失败。

当我运行我的生成器(你的我的生成器)时,我看到文件已经创建。

如何测试文件是否已创建? 到目前为止,这是我的代码无效。

我正在使用茉莉花进行测试。

let helpers = require('yeoman-test');
let assert = require('yeoman-assert');

describe('generator:test', function () {

    let path = require('path');

    beforeEach(function () {
        console.log(path.join(__dirname, '../generators/app'));
        // The object returned acts like a promise, so return it to wait until the process is done
        helpers.run(path.join(__dirname, '../generators/app'))
            .withPrompts({
                name: 'test',
                appName: 'test',
                appTitle: 'test',
                apiEndpoint: 'http://localhost'
            });
    })

    it('all config files', function () {

        assert.file(#arrayOfFiles#);
    });
});

1 个答案:

答案 0 :(得分:0)

我知道这是一个古老的问题,但是由于它在测试Yeoman发电机的Google搜索结果中排名很高,因此尝试回答它似乎很有用:

您的beforeAll需要返回helpers.run返回的Promise。否则,测试运行程序将不会在运行实际测试之前等待足够长的时间,并且文件将不存在。因此,您的示例应如下所示:

let helpers = require('yeoman-test');
let assert = require('yeoman-assert');

describe('generator:test', function () {

    let path = require('path');

    beforeEach(function () {
        return helpers.run(path.join(__dirname, '../generators/app'))
            .withPrompts({
                name: 'test',
                appName: 'test',
                appTitle: 'test',
                apiEndpoint: 'http://localhost'
            });
    })

    it('all config files', function () {
        assert.file(#arrayOfFiles#);
    });
});