Javascript 史崔克的麻烦和笑话
我在开玩笑测试史崔克。 史崔克似乎不采用玩笑测试 如果我在代码中手动引入这两个突变体,它们不会通过测试,但当我使用Stryker时,它们通过了测试 这项测试似乎并没有在突变体身上运行。我怎样才能让它工作 以下是我的配置: package.json:Javascript 史崔克的麻烦和笑话,javascript,node.js,unit-testing,jestjs,stryker,Javascript,Node.js,Unit Testing,Jestjs,Stryker,我在开玩笑测试史崔克。 史崔克似乎不采用玩笑测试 如果我在代码中手动引入这两个突变体,它们不会通过测试,但当我使用Stryker时,它们通过了测试 这项测试似乎并没有在突变体身上运行。我怎样才能让它工作 以下是我的配置: package.json: { "name": "test-stryker", "version": "1.0.0", "description": "", "main": "src/index.js", "scripts": { "test": "
{
"name": "test-stryker",
"version": "1.0.0",
"description": "",
"main": "src/index.js",
"scripts": {
"test": "jest",
"test-mutation": "stryker run"
},
"author": "",
"license": "ISC",
"devDependencies": {
"npm": "^6.0.0",
"@stryker-mutator/javascript-mutator": "^3.3.0",
"@stryker-mutator/jest-runner": "^3.3.0",
"jest": "^26.0.0",
"jest-cli": "^26.0.0"
}
}
config.jest.js:
'use strict'
module.exports = {
clearMocks: true,
collectCoverage: true,
collectCoverageFrom: [
'**/*.js',
'!**/reports/**/*.js',
'!**/test/**/*.js',
'!/node_modules/',
'!**/*.config.js',
'!**/*.conf.js'
],
coverageDirectory: 'reports/coverage',
testEnvironment: 'node'
}
stryker.conf.js:
/**
* @type {import('@stryker-mutator/api/core').StrykerOptions}
*/
module.exports = {
mutator: "javascript",
reporters: ["html", "clear-text", "progress"],
testRunner: "jest",
coverageAnalysis: "off",
jest: {
configFile: "jest.config.js",
},
};
sum.js:
'use strict'
module.exports = (a, b) => {
return a + b
}
sum.test.js:
'use strict'
const sum = require('../../src/sum')
describe('sum', () => {
test('With two values should return two values added.', () => {
expect(sum(5,2)).toBe(7)
})
})
结果如下:
16:23:30 (21936) INFO ConfigReader Using stryker.conf.js
16:23:31 (21936) INFO InputFileResolver Found 1 of 12 file(s) to be mutated.
16:23:31 (21936) INFO InitialTestExecutor Starting initial test run. This may take a while.
16:23:35 (21936) INFO InitialTestExecutor Initial test run succeeded. Ran 1 tests in 4 seconds (net 3 ms, overhead 2707 ms).
16:23:35 (21936) INFO MutatorFacade 2 Mutant(s) generated
16:23:35 (21936) INFO SandboxPool Creating 4 test runners (based on CPU count)
Mutation testing [==================================================] 100% (elapsed: <1m, remaining: n/a) 2/2 tested (2 survived, 0 timed out)
0. [Survived] ArithmeticOperator
C:\webdev\experiment\node\test-stryker\src\sum.js:3:11
- return a + b
+ return a - b
1. [Survived] BlockStatement
C:\webdev\experiment\node\test-stryker\src\sum.js:2:27
- module.exports = (a, b) => {
- return a + b
- }
+ module.exports = (a, b) => {}
Ran 0.00 tests per mutant on average.
----------|---------|----------|-----------|------------|----------|---------|
File | % score | # killed | # timeout | # survived | # no cov | # error |
----------|---------|----------|-----------|------------|----------|---------|
All files | 0.00 | 0 | 0 | 2 | 0 | 0 |
sum.js | 0.00 | 0 | 0 | 2 | 0 | 0 |
----------|---------|----------|-----------|------------|----------|---------|
16:23:30(21936)使用stryker.conf.js配置信息阅读器
16:23:31(21936)INFO InputFileResolver发现12个文件中有1个发生了变异。
16:23:31(21936)信息InitialTestExecutor开始初始测试运行。这可能需要一段时间。
16:23:35(21936)信息InitialTestExecutor初始测试运行成功。在4秒内运行1个测试(净3毫秒,开销2707毫秒)。
16:23:35(21936)信息突变Facade生成2个突变
16:23:35(21936)信息沙箱池创建4个测试运行程序(基于CPU计数)
突变测试[=======================================================================================]100%(已用时间:{
-返回a+b
- }
+module.exports=(a,b)=>{}
平均每个突变体进行0.00次测试。
----------|---------|----------|-----------|------------|----------|---------|
文件|%score | |#|#|#超时|#幸存|#无cov |#错误|
----------|---------|----------|-----------|------------|----------|---------|
所有文件| 0.00 | 0 | 0 | 2 | 0 | 0|
sum.js | 0.00 | 0 | 0 | 2 | 0 | 0|
----------|---------|----------|-----------|------------|----------|---------|
我也遇到了同样的问题,并发现显然是这个问题:
也就是说,jest的“查找相关测试”功能在Windows上似乎不起作用。当我将其添加到Stryker.config.json
中时,Stryker对我有效:
"jest": { "enableFindRelatedTests" : false }
当然,这对大型项目的性能非常不利。也许通过一些额外的研究,该功能可以发挥作用。我不确定这是一个玩笑的普遍问题,还是只有在stryker的推动下才会发生。有更好的解决方法。一个不影响性能的解决方法: 将.stryker tmp目录重命名为非隐藏目录
// stryker.conf.[js/json]
"tempDirName": "stryker-tmp",
(来源:)