TestCafe在Express中通过POST请求触发测试。

问题描述 投票:0回答:1

我有一个问题,但似乎没有得到任何答案。

我在Express.js api中运行测试。 我设置了一个页面,这个页面有一个按钮和一个字段,用来输入一个关键字,打算在testcafe测试中使用。 我设置的端点是 /testcafe. 但是,在发了一个帖子请求给 /testcafe,在测试运行的时候会有很长的延迟,所以我的问题是除了挂机之外,下一步最好的办法是什么?

另外,我的帖子请求体,包含关键词,能不能直接用在这样的测试中? 请记住是这样的模式。

前台 -> POST请求 -> Express服务器 -> testcafe终端 -test

我的问题是在到达测试后,我目前让它尝试从请求记录器内调用fetch。 这样做对吗?

import { ClientFunction, Selector } from 'testcafe';
import { RequestLogger, RequestHook } from 'testcafe';
import zlib from 'zlib';
import fetch from 'isomorphic-unfetch';

const url = 'https://www.mysitetesturl.com/page';

class MyRequestHook extends RequestHook {
    constructor (requestFilterRules, responseEventConfigureOpts) {
        super(requestFilterRules, responseEventConfigureOpts);
    }

    onRequest (e) {
        console.log('in onRequest!')
        console.log('========================')
        console.log('Request Body')
        let buf = e._requestContext.reqBody
        console.log(buf.toLocaleString())
    }

    onResponse (e) {

    let buf = Buffer(e.body) 
    let unzippedBody = Buffer(zlib.gunzipSync(buf)) 
    let payload = unzippedBody.toLocaleString()
    fetch('http://myapiipaddress/api/testcafe',
        method: 'PUT',
        body: JSON.stringify(payload)
        )
        .then((err, doc) => {
            if(err) {
                console.log(err)
            } else {
                console.log(doc)
            }
        })   
    }
}

const myRequestHook = new MyRequestHook({
    url: url, 
    method:'get'},
    { 
        includeHeaders: true, 
        includeBody: true 
    }
);

fetch('http://myapiipaddress/api/testcafe',
    method: 'GET'
    )
    .then((err, doc) => {
        if(err) {
            console.log(err)
        } else {


            fixture`myfixture`
                .page(doc.url)
                .requestHooks(myRequestHook);

            test(`mytest`, async t => { 
            const inputField = Selector('input');

            await t
                await t
                .wait(5000)
                .typeText(inputField, doc.text)
                .wait(5000)

                }   
            );

        }
    })

node.js express testing mongoose testcafe
1个回答
2
投票

根据你的方案,你需要以不同的方式组织你的代码。

const createTestCafe = require('testcafe');
....

// Choose the necessary body parser for express application
// https://github.com/expressjs/body-parser
app.use(bodyParser.urlencoded({ extended: true })); 
...
app.post('/', function (req, res) {
    createTestCafe('localhost', 1337, 1338, void 0, true)
       .then(testcafe => {
           const runner = testcafe.createRunner();

           return runner
               .src('/tests')
               .browsers('chrome')
               .run();
        })
       .then(failedCount => {
          testcafe.close();
          res.end();
    });

})

© www.soinside.com 2019 - 2024. All rights reserved.